CRM migration
Field-level mapping, validation, and rollback between Adobe Campaign and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Adobe Campaign
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Adobe Campaign and Odoo CRM.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Adobe Campaign and Odoo CRM serve fundamentally different data models. Adobe Campaign is a campaign execution platform built on XML-schema profiles, delivery logs, and broadlog tracking across email, SMS, and push channels. Odoo CRM is a sales-cycle CRM built around Leads, Opportunities, and the Contacts tied to them. We do not migrate Adobe Campaign as a campaign management platform into Odoo CRM — instead, we extract the prospect and customer records that lived in Adobe Campaign, preserve their campaign attribution and delivery history as activity notes, and land them as Contacts (or Leads for unengaged profiles) in Odoo CRM. Custom schemas and extended nms:recipient fields require pre-migration schema inspection to generate the Odoo custom field equivalents before import. Workflows, delivery templates, and automation logic do not migrate as code; we deliver a written inventory of every active workflow and dynamic content block for the customer's admin to rebuild in Odoo's Marketing Automation app.
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 Adobe Campaign 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.
Adobe Campaign
Recipients (nms:recipient)
Odoo CRM
Contact
1:1Adobe Campaign Recipients map to Odoo CRM Contacts. The nms:recipient standard fields (email, format preference, address, opt-out status) map to Odoo Contact fields directly. We inspect any schema extensions on nms:recipient and pre-create matching custom fields in Odoo Studio before migration. Recipients that are suppressions or hard bounces land as Contacts with opt_out=True to preserve suppression state at the destination.
Adobe Campaign
Recipients (nms:recipient)
Odoo CRM
Lead
1:manyAdobe Campaign Recipients without any sales-cycle engagement (no linked Opportunity, no reply, no click) split to Odoo Lead rather than Contact. We evaluate the broadlog records and engagement history to classify each Recipient: active campaign participants with click or reply history land as Contact; cold list profiles with no engagement land as Lead. The original Adobe Campaign profile data migrates in full on both paths.
Adobe Campaign
Recipients (nms:recipient)
Odoo CRM
Contact.company_id (Account)
1:1Adobe Campaign Recipients optionally carry a company link via the @company field or an FDA-linked Account table. We resolve this to an Odoo CRM Contact with a linked Odoo Account (res.partner with customer=True). If the source has an FDA-linked external company table, we extract it separately and create the Odoo Account records first so that the Contact-Account relationship is satisfied at insert time.
Adobe Campaign
Campaigns (nms:campaign)
Odoo CRM
CRM Campaign (crm.case.channel)
1:1Adobe Campaign campaign metadata (label, type, start date, end date, status) maps to Odoo CRM Campaign. Campaign identifier @internalName is preserved in a custom field ac_campaign_id__c for reference and audit. Campaign folders and programs map to the CRM Campaign's parent structure if the destination Odoo instance uses campaign hierarchies.
Adobe Campaign
Campaigns (nms:campaign)
Odoo CRM
Marketing Automation Campaign (marketing.campaign)
1:1If the destination Odoo instance includes the Marketing Automation app, Adobe Campaign campaigns migrate as Odoo Marketing Campaigns with the same name and date range. Campaign targeting criteria (queryDef expressions) do not migrate as logic but are documented as a written list of segmentation rules for the admin to rebuild in Odoo's visual campaign builder.
Adobe Campaign
Delivery logs (BroadLog)
Odoo CRM
CRM Activity (mail.message)
1:1Adobe Campaign BroadLog records (every sent message across email, SMS, push) are too granular for Odoo's activity model. We aggregate per-contact per-campaign: the most recent send date, total sends, total bounces, total opens (if tracking data is present), and total clicks. This summary migrates as an internal note on the Contact record in Odoo, tagged with the Adobe Campaign campaign name and date range. Individual broadlog rows do not import into Odoo because Odoo has no equivalent multi-channel delivery-log object.
Adobe Campaign
Tracking logs (NmsTrackingLog)
Odoo CRM
CRM Activity note
1:1Click-through URLs and timestamped tracking events are aggregated by contact and campaign and appended as structured notes on the Odoo Contact or Lead. The aggregated open rate, click rate, and bounce status per campaign are stored as custom fields on the contact. Aggregate campaign-level metrics are stored on the CRM Campaign record. Individual tracking log rows are not imported row-by-row.
Adobe Campaign
Services and subscriptions
Odoo CRM
Contact (opt-in fields)
1:1Adobe Campaign Services (opt-in lists) map to Odoo Contact opt-in status. Subscription date migrates as a custom field subscription_date__c. Double-opt-in confirmation flags map to a subscription_confirmed__c boolean. The subscription list name is preserved in a custom field original_service_name__c so the admin can recreate the service as an Odoo mailing list or contact list post-migration.
Adobe Campaign
Custom schemas (nms:ext:*)
Odoo CRM
Custom fields on Contact or Lead
lossyCustom tables created via schema extension in the nms:ext: namespace or via FDA-linked external schemas require pre-migration XML inspection. We parse the schema XML to derive the underlying SQL table and field types, then generate equivalent Odoo Studio custom fields on the Contact or Lead model before import. Schema relationships (foreign keys, link fields) map to Odoo many2one or one2many fields where supported; circular or complex relationships are documented as custom-field limitations.
Adobe Campaign
Enumerations
Odoo CRM
Selection fields
lossyAdobe Campaign enumerations defined in schema XML (deliveryStatus, gender, etc.) may have different internal string values than Odoo's selection field options. We build a value-mapping table keyed by enumeration name and map source values to the nearest Odoo selection equivalents. Any unmapped values land in a custom text field with the original value preserved for admin review.
Adobe Campaign
Seed addresses
Odoo CRM
(Not migrated)
1:1Seed addresses are internal proofing records specific to Adobe Campaign's delivery infrastructure. They do not migrate. We recommend rebuilding proof and seed testing directly in Odoo Marketing Automation's test-send feature.
Adobe Campaign
Control groups
Odoo CRM
Written inventory
lossyAdobe Campaign delivery exclusion groups (control populations) are stored as queryDef expressions. We extract the exclusion criteria as a written segmentation specification and deliver it to the customer's admin for recreation as an Odoo Marketing Automation audience filter or CRM campaign exclusion list.
| Adobe Campaign | Odoo CRM | Compatibility | |
|---|---|---|---|
| Recipients (nms:recipient) | Contact1:1 | Fully supported | |
| Recipients (nms:recipient) | Lead1:many | Fully supported | |
| Recipients (nms:recipient) | Contact.company_id (Account)1:1 | Fully supported | |
| Campaigns (nms:campaign) | CRM Campaign (crm.case.channel)1:1 | Fully supported | |
| Campaigns (nms:campaign) | Marketing Automation Campaign (marketing.campaign)1:1 | Fully supported | |
| Delivery logs (BroadLog) | CRM Activity (mail.message)1:1 | Mapping required | |
| Tracking logs (NmsTrackingLog) | CRM Activity note1:1 | Fully supported | |
| Services and subscriptions | Contact (opt-in fields)1:1 | Mapping required | |
| Custom schemas (nms:ext:*) | Custom fields on Contact or Leadlossy | Fully supported | |
| Enumerations | Selection fieldslossy | Fully supported | |
| Seed addresses | (Not migrated)1:1 | Not supported | |
| Control groups | Written inventorylossy | Mapping required |
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.
Adobe Campaign gotchas
ACS to ACC schema migration breaks dynamic content blocks
Per-active-profile billing counts every imported Recipient
Technical operator IMS migration mandatory in v8.5+
v8 FFDA dual-database architecture complicates data mapping
List export ceiling of 100,000 rows requires chunking
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
Source audit and edition determination
We audit the source Adobe Campaign instance across all active editions in scope (Classic v7, Standard, v8). We inspect the XML schemas for nms:recipient, any nms:ext: custom schemas, nms:service, nms:campaign, and the broadlog and trackingLog tables. We identify FFDA dual-database tables in v8 by querying the cloud database separately from the local database and comparing record counts. We extract distinct enumeration values, recipient counts by service, and delivery log volume estimates. The output is a written source-data inventory and a migration scope document that defines the Recipient-to-Contact routing rule.
Destination Odoo configuration
We set up the destination Odoo database with the CRM app and optionally the Marketing Automation app. We use Odoo Studio to pre-create all custom fields identified in the Adobe Campaign schema inspection: ac_campaign_id__c, ac_format_preference__c, ac_subscribed_service__c, ac_subscription_date__c, ac_total_sends__c, ac_total_opens__c, ac_total_clicks__c, ac_hard_bounces__c, ac_blacklist_status__c, ac_profile_created__c, ac_original_civility__c, and ac_original_country__c. Selection field options for format preference, blacklist status, and campaign stage are configured to match the Adobe Campaign enumeration values via the value-mapping table.
Recipient extraction and routing
We extract Recipients from Adobe Campaign via the REST API (for v8 Standard/REST endpoints) or via workflow-based file extraction for v7 and high-volume exports. Large exports are chunked to handle the 100,000-row list export ceiling where applicable. Each Recipient record is enriched with aggregated broadlog data (send count, bounce count, last send date) and evaluated against the routing rule to determine whether it lands as an Odoo Lead or Contact. Suppressions and hard bounces are flagged for opt_out=True in Odoo.
Account creation and Contact import
We extract distinct company values from Adobe Campaign Recipients (and any FDA-linked external company table) and create Odoo Account records first. Contact records are then imported with @company resolved to the matching Account ID. The import uses Odoo's CSV import mechanism or the xmlrpc/create endpoint with batch chunking. Duplicate detection uses email as the dedupe key; duplicates are merged with a preference for the record with the most engagement history.
Campaign and delivery summary migration
Adobe Campaign campaigns are created as Odoo CRM Campaigns with name, dates, and internal Adobe Campaign ID preserved. Delivery log aggregates (per contact per campaign) are written as custom field updates on the Contact records. We do not create individual activity records for each message sent; instead, the structured field values provide at-a-glance engagement data on each Contact in Odoo. If the Marketing Automation app is installed, campaigns are also created as Marketing Campaigns with the same metadata.
Cutover, validation, and automation rebuild handoff
We freeze Adobe Campaign writes during cutover and run a final delta extraction of any records modified during the migration window. We validate record counts against the pre-migration inventory, spot-check 30-50 random Contact records for field-level accuracy, and verify that hard-bounce contacts landed with opt_out=True. We deliver the written workflow inventory, delivery template list, and segmentation rule documentation to the customer's Odoo admin. We support a one-week hypercare window for reconciliation issues. Workflow rebuild, delivery template recreation, and Marketing Automation campaign logic are outside standard migration scope.
Platform deep dives
Adobe Campaign
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Adobe Campaign and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Adobe Campaign and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Adobe Campaign 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
Adobe Campaign: Not publicly documented; throughput limits are contract-specific and enforced at the infrastructure level.
Data volume sensitivity
Adobe Campaign 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 Adobe Campaign to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Adobe Campaign 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 Adobe Campaign
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.