CRM migration
Field-level mapping, validation, and rollback between Marketing 360 and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Marketing 360
Source
Odoo CRM
Destination
Compatibility
10 of 14
objects map 1:1 between Marketing 360 and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Marketing 360 to Odoo CRM is a schema restructuring, not a direct record copy. Marketing 360 uses a flat Contact object with embedded organization data, tags, assignees, statuses, and types all stored as properties on a single record. Odoo CRM separates Contact (person) from Company/Commercial Partner, requires explicit Lookups between them, and uses crm.lead for pipeline Opportunities. We split the flat Marketing 360 contact model into Odoo res.partner (Contact) and res.partner (Company) records at migration time, resolve the many-to-one parent relationship, and preserve tags and custom field values in Odoo custom fields and tags. Automation journeys and email marketing sequences do not migrate; we deliver a written rebuild checklist for Odoo CRM自动化 (automations) and email marketing alternatives. The UXi website export produces XML content only, not layout files; we separate website rebuild as a distinct workstream and migrate testimonial text and media references separately. Payments configuration lives outside the CRM in both platforms and requires a separate reconfiguration workstream.
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 Marketing 360 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.
Marketing 360
Contact
Odoo CRM
res.partner (split into Contact and Company)
1:manyMarketing 360's flat Contact with embedded organization fields (organizationId, contactName) splits into two Odoo res.partner records at migration time. The primary contact person becomes one res.partner with partner_latitude/longitude and category_id (tags). The associated organization becomes a separate res.partner with is_company=True and the primary contact linked via child_id. We use the Marketing 360 organizationId as the dedupe key for Company creation and apply a mapping table to preserve the relationship back to the Contact record.
Marketing 360
Contact.email
Odoo CRM
res.partner.email
1:1Marketing 360 email maps directly to res.partner.email and serves as the primary dedupe key for Contact records during import. We validate email format before insert and flag any malformed addresses for customer review.
Marketing 360
Contact.phone
Odoo CRM
res.partner.phone and res.partner.mobile
1:1Marketing 360 phone maps to res.partner.phone; if the source stores separate mobile numbers, these map to res.partner.mobile. We strip non-numeric characters during transform to comply with Odoo's phone normalization if the customer has phone formatting installed.
Marketing 360
Contact.customFiel
Odoo CRM
res.partner (custom field or ir.model.data)
lossyMarketing 360 custom fields (exposed via the Custom Fields API as id-value pairs per contact) map to Odoo custom fields. In Odoo Community, custom fields require the studio module or manual ir.model.fields creation; in Enterprise, they are configurable via Settings > Custom Fields. We pre-create the destination custom field schema before migration, preserving field type (char, selection, integer, date) and any picklist options used in Marketing 360 Status or Type properties.
Marketing 360
Contact.tags
Odoo CRM
res.partner.category_id
1:1Marketing 360 contact tag arrays (id and tag name) migrate to Odoo res.partner.category_id, which is a many2many_tags field. We extract the full tag taxonomy from the source API, create equivalent Tags in Odoo (or map to existing tags if the customer has already set them up), and apply tag memberships per contact. Tags used for segmentation logic carry over as category entries for reporting in Odoo.
Marketing 360
Contact.assignees
Odoo CRM
res.users (linked via res.partner.user_id)
1:1Marketing 360 assignees (stored as username, fullName, email nested under contact records) map to Odoo res.users by email match. We resolve each assignee reference during migration and set res.partner.user_id on the migrated Contact so that the sales rep is the responsible user in Odoo. Any Marketing 360 assignee without a matching Odoo user is placed in a reconciliation queue for the customer's admin to provision before Contact import resumes.
Marketing 360
Contact.Status and Contact.Type
Odoo CRM
res.partner (custom fields) or crm.lead.tag
lossyMarketing 360 Status and Type are arbitrary name/id pairs without a standard Odoo equivalent. We extract the full taxonomy during discovery and map Status values to a custom selection field on res.partner (e.g., m360_status__c) or to crm.lead.tag depending on whether the customer uses Odoo's Lead kanban for early-stage prospects. The mapping table is delivered as part of the migration spec for the customer's admin to finalize before production import.
Marketing 360
Deal
Odoo CRM
crm.lead
1:1Marketing 360 Deals map to Odoo crm.lead records in the Opportunities kanban view. The HubSpot-to-Salesforce-style pipeline-to-kanban split does not apply here because Odoo uses a single crm.lead model with a team kanban view; multiple pipelines are represented as Odoo CRM Teams (crm.team) with separate stage sequences per team. We extract the Marketing 360 pipeline and stage assignments and configure matching Odoo stages per crm.team before import.
Marketing 360
Deal stage and pipeline
Odoo CRM
crm.team and crm.stage
lossyMarketing 360 pipeline and stage assignments map to Odoo crm.team (one per Marketing 360 pipeline) and crm.stage (one stage set per team). Stage probability percentages map to Odoo stage probability values. The customer configures team-stage associations in Odoo before migration; we provide the mapping table with the number of stages, stage names, and probability values sourced from Marketing 360.
Marketing 360
UXi Posts and Pages
Odoo CRM
crm.lead.description or external CMS
1:1UXi XML export contains Posts, Pages, and Testimonials as structured content. Odoo CRM does not include a CMS, so content is flagged for migration to the customer's chosen destination CMS (WordPress, Webflow, or Odoo Website if selected). Testimonials migrate as res.partner comments or as a custom testimonials model if the customer licenses Odoo Studio. We extract content text, categories, tags, and media URLs from the XML and deliver them as structured CSV for the customer's CMS admin to import.
Marketing 360
UXi Media Assets
Odoo CRM
ir.attachment or external media library
1:1The UXi XML export includes media references but not root-domain hosted assets. We download accessible media files during export, re-upload them to the Odoo attachments table (ir.attachment linked to res.partner) if the media is CRM-relevant (e.g., contact photos, company logos), and flag the remainder as out-of-scope for the website rebuild workstream. Any inaccessible media is documented in a gap report.
Marketing 360
Email Subscribers and Lists
Odoo CRM
res.partner (opt-in flags)
1:1Marketing 360 subscriber data and segment membership extract via the CRM contact export. Email opt-in and opt-out preferences migrate to res.partner.opt_out (boolean) and a custom m360_list_segmentation__c field for audit. We do not migrate email marketing sequences or automated journey triggers; those require reconfiguration in the customer's chosen email marketing platform post-migration.
Marketing 360
Automation Journeys
Odoo CRM
ir.actions.server (manual rebuild)
1:1Marketing 360 automation journeys and automation logic are stored in the platform's application layer and are not accessible via the public API. Workflow definitions, trigger conditions, time delays, and subscriber entry points do not migrate. We document all active Marketing 360 journeys during discovery (name, trigger type, steps, and estimated equivalent Odoo CRM automation) in a written rebuild checklist delivered as part of the migration handoff package.
Marketing 360
Payments Configuration
Odoo CRM
External (separate workstream)
1:1Marketing 360 bundles its own payment processing layer with card-present and card-not-present fee structures, hardware costs, chargeback fees, and payout fees. These configuration records live in the Marketing 360 payments module, not in the CRM data model. They do not appear in the API export and cannot be migrated. We separate payment processor reconfiguration as a distinct workstream in the migration plan and flag the fee differential for the customer's finance team to compare against Odoo's integrated payment providers (Stripe, PayPal, Buckaroo) if Odoo Accounting or Point of Sale is also in scope.
| Marketing 360 | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (split into Contact and Company)1:many | Fully supported | |
| Contact.email | res.partner.email1:1 | Fully supported | |
| Contact.phone | res.partner.phone and res.partner.mobile1:1 | Fully supported | |
| Contact.customFiel | res.partner (custom field or ir.model.data)lossy | Fully supported | |
| Contact.tags | res.partner.category_id1:1 | Fully supported | |
| Contact.assignees | res.users (linked via res.partner.user_id)1:1 | Fully supported | |
| Contact.Status and Contact.Type | res.partner (custom fields) or crm.lead.taglossy | Fully supported | |
| Deal | crm.lead1:1 | Fully supported | |
| Deal stage and pipeline | crm.team and crm.stagelossy | Fully supported | |
| UXi Posts and Pages | crm.lead.description or external CMS1:1 | Fully supported | |
| UXi Media Assets | ir.attachment or external media library1:1 | Fully supported | |
| Email Subscribers and Lists | res.partner (opt-in flags)1:1 | Mapping required | |
| Automation Journeys | ir.actions.server (manual rebuild)1:1 | Not supported | |
| Payments Configuration | External (separate workstream)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.
Marketing 360 gotchas
UXi website export does not include layout files
Automation journeys are not accessible via API
Bulk contact export requires pagination over the CRM API
Payments configuration is outside the CRM data model
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 Odoo edition selection
We audit the Marketing 360 portal across custom fields, tag taxonomy, active statuses and types, assignee count, pipeline and stage definitions, deal volume, and UXi content types. We pair this with an Odoo edition decision: Community (free, self-hosted) suits teams with internal IT resources who want no recurring CRM cost; Odoo Online ($30/user/month CRM) suits teams who want managed hosting with Odoo.sh-style upgrades; Enterprise ($42/user/month CRM) is required if the customer needs studio-built custom fields, the native data import UI, or SLA support. The discovery output is a written migration scope including record counts, schema mapping draft, and Odoo edition recommendation.
Schema design and flat-contact split rule
We design the destination schema in Odoo. This includes creating the Company and Contact res.partner records with is_company flags, configuring custom fields for Marketing 360 Status and Type values, creating Odoo Tags for the tag taxonomy, configuring crm.team (one per Marketing 360 pipeline), configuring crm.stage per team with probability percentages, and defining the parent_id relationship rule for the Contact-Company split. In Odoo Community, custom fields are created via the studio module or direct ir.model.fields insertion; in Enterprise, they are created via Settings > Custom Fields. Schema is validated in a sandbox or staging Odoo instance before production migration.
Sandbox migration and reconciliation
We run a full migration into a staging Odoo environment using production-like data volume. The customer's operations lead reviews record counts (Companies in, Contacts in, crm.lead in), spot-checks 25-50 random records against the Marketing 360 source, validates the parent_id linkage on Contact-Company pairs, and confirms tag assignment on sample records. Any mapping corrections happen here, not in production. The customer also validates that the Odoo pipeline kanban reflects the expected stage names and probabilities before we proceed to production.
Owner and user reconciliation
We extract every distinct Marketing 360 assignee referenced on Contact, Deal, and tag records and match by email against the Odoo destination's res.users table. Assignees without a matching Odoo user go to a reconciliation queue. The customer's Odoo admin provisions any missing users (active or inactive depending on whether the original Marketing 360 assignee is still active). Migration cannot proceed past this step because the res.partner.user_id field on Contact requires a valid res.users reference.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner with is_company=True from Marketing 360 organizationId), Contacts (res.partner with parent_id resolved to Company), Tags (created in Odoo and applied via category_id), Custom field values (via custom field write or CSV import mapped to the pre-created field), crm.lead (with team_id, stage_id, and user_id resolved), and UXi content (testimonials and media as ir.attachment linked to res.partner where CRM-relevant). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Marketing 360 writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the Automation Journey rebuild checklist and the UXi content export CSV. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's sales team. We do not rebuild Marketing 360 automation journeys as Odoo CRM automated actions inside the migration scope; that is a separate engagement for the customer's Odoo admin or implementation partner. Payments reconfiguration and website design rebuild are separate workstreams outside migration scope.
Platform deep dives
Marketing 360
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Marketing 360 and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Marketing 360 and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Marketing 360 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
Marketing 360: Not publicly documented by Marketing 360.
Data volume sensitivity
Marketing 360 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 Marketing 360 to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Marketing 360 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 Marketing 360
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.