CRM migration
Field-level mapping, validation, and rollback between cMercury and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
cMercury
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between cMercury and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from cMercury to Odoo CRM is a cross-category move: cMercury is an email marketing platform with subscriber-centric data, while Odoo CRM is a full relationship management system with Contact, Company, Lead, and Opportunity objects. There is no direct object equivalence between marketing subscribers and CRM contacts, so we resolve the schema gap by mapping cMercury Subscribers to Odoo CRM Contacts, preserving the engagement score as a custom numeric field, and storing email verification status as a contact-level flag. Historical campaign performance (opens, clicks, bounces) migrates as Activity records or Notes against each Contact so the timeline is preserved. cMercury Segments map to Odoo CRM Tags; campaign metadata (subject lines, send dates, aggregate stats) migrates as Note records or Opportunity-linked activities. Automations, templates, sending domains, and the Asset Library are documented rather than migrated: automations require manual rebuild in Odoo's Action Rules or Studio automation; sending domains require fresh DNS configuration; and template HTML is exported for manual reassembly in Odoo's email composer. We do not migrate Workflows, Sequences, or Automations as code; we deliver a written inventory for your admin to rebuild in Odoo Studio or Action Rules.
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 cMercury 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.
cMercury
Subscriber
Odoo CRM
Contact
1:1cMercury Subscribers map to Odoo CRM Contacts. The cMercury email address becomes the Contact email field and serves as the dedupe key. Subscription status (active, unsubscribed, bounced) maps to Odoo CRM's opt-out and blacklist fields: active subscribers remain in the normal contact list, unsubscribed contacts are flagged via the mass_mailing Unsubscribe field, and bounced contacts are flagged in the blacklist or an internal mail.mass_mailing.contact state field. Engagement score migrates as a custom float field on Contact (cm_engagement_score__c) if the customer requests it during scoping; otherwise it is preserved as a CSV export for post-migration manual entry. The cMercury Verify badge (valid, invalid, risky, catch-all) migrates as a selection field on the Contact record (cm_verification_status__c) so the new system can honour quality indicators.
cMercury
Segment
Odoo CRM
Tag
lossycMercury Segments are dynamic filter-based audience groups (engagement score, source, custom field conditions). Odoo CRM does not have a native dynamic segment engine equivalent to cMercury's rule-based segmentation. We translate cMercury's segment membership rules into Odoo CRM Tags, assigning each subscriber the relevant tag(s) based on the last-known segment membership. For segments built on static criteria (tags, source), this is a direct tag assignment. For segments built on engagement thresholds or date ranges, we note the rule in the segment inventory document for the admin to rebuild using Odoo's Domain filter on a saved Filter view.
cMercury
Campaign
Odoo CRM
Activity + Note
many:1cMercury Campaign records include subject line, send date, aggregate open rate, click rate, bounce rate, and unsubscribe count. Odoo CRM has no native Campaign object in the base CRM app. We merge campaign metadata into a Note record attached to each Contact who received the campaign, or into a single Note per campaign for reference. Aggregate campaign performance metrics (total opens, clicks, bounces) are stored as a Note on the CRM's root document (or a dedicated Project in the Project app if Odoo Project is enabled) so the customer retains historical performance data. The customer can also opt to map campaign send history to Opportunities if Odoo CRM's native Activity and marketing tracking are used alongside Odoo Marketing, which is outside the base CRM scope.
cMercury
Custom Field
Odoo CRM
Custom Field on Contact
1:1cMercury custom profile fields (text, number, date, dropdown) map directly to Odoo CRM custom fields on the Contact model. We create fields of the matching type during schema design, before any data import. Dropdown fields from cMercury become Odoo Selection fields with the same option values. Date fields map to Odoo Date fields. Numeric fields map to Float or Integer fields depending on the cMercury data type. Fields are deployed into the Odoo Sandbox first for validation before production import.
cMercury
Tag
Odoo CRM
Tag
1:1cMercury flat tags on subscribers map 1:1 to Odoo CRM Tags. We export all subscriber tag assignments and bulk-apply them to the corresponding Contacts during import using Odoo's mail.composer.mixin (tag write API). Tag names are preserved exactly; tag count is maintained as a count of unique tags per Contact in a custom field if the customer requires it.
cMercury
Email Verification Result
Odoo CRM
Custom Field on Contact
1:1cMercury Verify stores per-email validation status (valid, invalid, risky, catch-all) as a badge on each subscriber record. We map this to a selection field (cm_verification_status) on the Odoo CRM Contact record, with values: valid, invalid, risky, catch-all, and unknown. This preserves the quality signal for the customer's deliverability team to reference without re-running verification on the imported list. If the customer has an Odoo email marketing integration (e.g., Odoo Email Marketing app), the verification field can be used to suppress invalid addresses from future sends.
cMercury
Engagement Score
Odoo CRM
Custom Float Field on Contact
1:1cMercury tracks per-subscriber engagement scores as numeric values derived from open, click, and reply rates. We map engagement scores to a custom float field (cm_engagement_score) on the Contact record. If Odoo CRM has a scoring system enabled (available via the CRM Score app or a custom field), the score can be used to drive Odoo's lead prioritisation. Note that Odoo's native scoring engine uses different calculation logic; we preserve the original cMercury numeric score as a static field rather than recalculating it in Odoo's model.
cMercury
Asset Library
Odoo CRM
Attachment on IrAttachment
1:1Images and files stored in the cMercury Asset Library are downloaded as a batch during extraction, preserving file names and folder organisation. We upload them to Odoo CRM's IrAttachment records, linked to the relevant Contact or saved as general Attachments in Odoo's document management (if the Documents app is enabled). Folder hierarchy is approximated using Odoo's tags on attachments or subfolders in the Documents app, where supported. Plain image files (JPEG, PNG, GIF) are uploaded to the Odoo attachment store; HTML template files are stored as Attachments for manual reassembly in Odoo's email composer.
cMercury
Template
Odoo CRM
Attachment (Product Template Description or Email Template)
1:1cMercury templates use a proprietary block structure for the drag-and-drop editor. We extract the HTML source and image assets from each template and store them as Attachments in Odoo CRM. The customer can then manually reassemble the template using Odoo's Email Template editor or paste the HTML into a custom email template. We flag which templates had complex nested blocks (e.g., conditional content, dynamic personalisation) in the inventory document so the admin knows which templates require extra reassembly effort. Template metadata (name, subject line, creation date) is preserved as a Note in the attachment description.
cMercury
Automations
Odoo CRM
Action Rule / Studio Automation (manual rebuild)
lossycMercury Automations are named workflow sequences with triggers, delays, and actions. We document the full automation tree for each active automation during discovery: trigger type, filter conditions, action sequence, and any conditional branching. We deliver this as a written automation inventory with trigger mapping recommendations for Odoo CRM Action Rules or Studio automations. The customer or an Odoo partner rebuilds the automations post-migration. No automation data migrates automatically.
cMercury
Sending Domain
Odoo CRM
DNS Configuration (manual)
lossycMercury sending domains are configured with DKIM, SPF, and DMARC records pointing to cMercury's infrastructure. Odoo Online uses Odoo's own sending infrastructure; Odoo.sh and On-Premise allow custom sending domains with customer-managed DNS. We provide a DNS checklist at cutover that specifies the TXT, DKIM, and SPF records required for each domain in the Odoo environment. The customer configures DNS in their domain registrar. We do not manage DNS changes. Sending domain ownership cannot be transferred between platforms.
cMercury
Owner
Odoo CRM
User
1:1cMercury Owner records (users who own subscribers and campaigns) map to Odoo CRM User records. We resolve cMercury owners by email address match against the destination Odoo User table. Any cMercury Owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision before record import resumes. Inactive cMercury owners are mapped to inactive Odoo Users so that ownership attribution is preserved even if the user is no longer active.
| cMercury | Odoo CRM | Compatibility | |
|---|---|---|---|
| Subscriber | Contact1:1 | Fully supported | |
| Segment | Taglossy | Fully supported | |
| Campaign | Activity + Notemany:1 | Fully supported | |
| Custom Field | Custom Field on Contact1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Email Verification Result | Custom Field on Contact1:1 | Fully supported | |
| Engagement Score | Custom Float Field on Contact1:1 | Fully supported | |
| Asset Library | Attachment on IrAttachment1:1 | Mapping required | |
| Template | Attachment (Product Template Description or Email Template)1:1 | Fully supported | |
| Automations | Action Rule / Studio Automation (manual rebuild)lossy | Mapping required | |
| Sending Domain | DNS Configuration (manual)lossy | Fully supported | |
| Owner | 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.
cMercury gotchas
Free tier caps daily sends at 200 emails
cMercury branding on Free plan emails
Automation workflows do not migrate automatically
Sending domain ownership cannot be transferred
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 environment assessment
We audit the cMercury account across all objects: subscriber volume, segment definitions and membership counts, campaign send history, active automations, custom field schema, tag inventory, Asset Library size and file types, and engagement score range. We pair this with an Odoo CRM environment review: which Odoo edition is deployed (Online,.sh, or On-Premise), the current Odoo version, which CRM apps are installed (CRM alone vs CRM plus Project or Marketing), and the target user count. The discovery output is a written migration scope with object-level mapping, a custom field creation list, an automation inventory form, and a recommended Odoo CRM configuration approach.
Schema design and Odoo custom field creation
We design the destination schema in the Odoo environment before any data import. This includes creating custom fields on the Contact model for engagement score (Float), verification status (Selection), and any cMercury custom fields without direct Odoo equivalents. We configure Tags for segment migration and set up any required Odoo Apps (Documents for asset storage, Project if campaign tracking via activities is selected). Custom fields are deployed into the Odoo Sandbox (Full Copy or Partial Copy) first for validation before production.
Sandbox migration and reconciliation
We run a full test migration into the Odoo Sandbox using production-like data volume extracted from cMercury. The customer reconciles record counts (Subscribers in vs Contacts in, Tags assigned, campaign notes created), spot-checks 25-50 random Contacts against the source data, and reviews the custom field values and tag assignments. Any field mapping corrections, missed custom fields, or tag naming issues are resolved in the Sandbox before production migration begins.
Owner reconciliation and Odoo User provisioning
We extract every distinct cMercury Owner referenced on subscriber and campaign records and match by email against the destination Odoo User table. Owners 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 cMercury user is still active). Migration cannot proceed past this step because Contact owner fields must be satisfied at insert time for Odoo's access control.
Production migration in dependency order
We run production migration in record order: Odoo Users (validated), Accounts/Companies (if multi-company Odoo, created first), Contacts (with opt-out, blacklist, engagement score, and verification status fields set, owner resolved), Tags (bulk-applied per subscriber), campaign notes (merged into per-campaign Notes attached to relevant Contacts), asset files (uploaded to IrAttachment), custom field data for any remaining cMercury custom objects. Each phase emits a row-count reconciliation report before the next phase begins.
Automation inventory delivery and cutover
We freeze cMercury 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 inventory document to the customer's admin team with recommended Odoo Action Rule equivalents for each cMercury automation. We support a one-week hypercare window where we resolve reconciliation issues. We do not rebuild cMercury automations as Odoo Action Rules inside the migration scope; that is a separate Odoo configuration engagement. We also deliver the DNS configuration checklist for each sending domain.
Platform deep dives
cMercury
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between cMercury and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across cMercury and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between cMercury 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
cMercury: Not publicly documented. cMercury's Terms reference API rate limits as service restrictions but exact thresholds are not disclosed on the public docs site (cmercuryapi.readme.io)..
Data volume sensitivity
cMercury 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 cMercury to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your cMercury 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 cMercury
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.