CRM migration
Field-level mapping, validation, and rollback between Salesforce Marketing Cloud Account Engagement and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Salesforce Marketing Cloud Account Engagement
Source
Odoo CRM
Destination
Compatibility
16 of 18
objects map 1:1 between Salesforce Marketing Cloud Account Engagement and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Salesforce Marketing Cloud Account Engagement to Odoo CRM is a structural migration from a B2B marketing automation platform built on Salesforce to an open-source ERP with an integrated CRM module. Account Engagement organises data around Prospects, Scoring Categories, Business Units, and Engagement Studio programs; Odoo CRM uses Contacts, Companies, Tags, and Workflow triggers. We migrate the record layer — Prospects as Contacts, Scoring Categories as CRM Tags, Custom Fields as Odoo custom fields, and email template HTML with merge field syntax rewritten from Pardot double-brace (%%first_name%%) to Odoo Jinja2 ({field_name}) — and we deliver a written automation inventory so your admin can rebuild Engagement Studio programs in Odoo Workflow or a third-party automation tool. We do not migrate Engagement Programs, Automation Rules, Forms, Landing Pages, or Reports as functional assets; these are documented for manual rebuild.
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 Salesforce Marketing Cloud Account Engagement 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.
Salesforce Marketing Cloud Account Engagement
Prospect
Odoo CRM
Contact (res.partner)
1:1Account Engagement Prospects map to Odoo Contact (res.partner). Email address is the dedupe key for both platforms. We use a three-pass matching strategy: exact email match, normalised email match (lowercased, stripped of dots in Gmail addresses), then flagged for manual resolution if no match exists. Pardot prospect_id is preserved in a custom field pardot_prospect_id__c for audit trail. Scoring values (total_score, demographic_score, behavioural_score) migrate as integer custom fields; Pardot grade migrates as a text field.
Salesforce Marketing Cloud Account Engagement
Account (Salesforce)
Odoo CRM
Company (res.partner, is_company=True)
1:1Account Engagement has no native Account object — Prospects are associated to Accounts via the Salesforce CRM sync. We create or match Odoo Company records (res.partner with is_company=True) using the domain extracted from the Prospect email address or the stored company_name field. Company records are imported before Contact records to satisfy the partner_id foreign key. Company Phone, Website, Street, City, State, Country, and zip migrate directly.
Salesforce Marketing Cloud Account Engagement
Scoring Category
Odoo CRM
CRM Tag
lossyPardot Scoring Categories (named buckets such as behavioural score, demographic score) map to Odoo CRM Tags on the Contact record. We export category definitions and their weight rules as a configuration document. Odoo does not have a native lead scoring engine, so the customer's admin rebuilds scoring logic using Odoo Workflow server actions or a third-party marketing automation tool. Tags preserve the Pardot category labels so that segmentation rules can be recreated manually.
Salesforce Marketing Cloud Account Engagement
Custom Field
Odoo CRM
Custom Field (res.partner or crm.lead)
1:1Account Engagement Custom Fields are first-class API objects exported via Pardot v5 API with label, type, and per-record values. We map each custom field to an Odoo custom field on res.partner (for Prospect-level fields) or crm.lead (for Opportunity-level fields). Field types map as follows: text to char, long text to text, number to float or integer, date to date, dropdown to selection, checkbox to boolean. Required fields on Pardot are set as required in Odoo Studio before import begins.
Salesforce Marketing Cloud Account Engagement
Campaign
Odoo CRM
Tag + CRM Lead
1:1Account Engagement Campaigns track marketing initiative performance and link to Salesforce Campaigns. We export Campaign metadata (name, status, type, start date, budget) and map them to Odoo CRM Tags applied to the Contacts that were members of each campaign. Prospect-level activity data (opens, clicks, form submissions) is preserved as custom fields on the Contact record rather than as campaign membership records, since Odoo CRM does not have a native Campaign Member object equivalent.
Salesforce Marketing Cloud Account Engagement
Engagement Program
Odoo CRM
Documentation only
1:1Engagement Programs in Account Engagement reference internal Pardot IDs for Prospects, Campaigns, Forms, and Landing Pages. These IDs do not exist in Odoo, making direct migration structurally impossible. We do not migrate Engagement Programs as functional assets. We document the existing program structure during scoping — program name, trigger conditions, step sequence, completion actions, and associated assets — and deliver this as a written automation inventory document for the customer's admin to rebuild in Odoo Workflow or a third-party automation platform such as Mautic, Brevo, or ActiveCampaign.
Salesforce Marketing Cloud Account Engagement
Automation Rule
Odoo CRM
Documentation only
1:1Automation Rules in Account Engagement are triggered by Prospect actions (form fills, email opens, page visits, score changes) and execute CRM updates, list assignments, and email sends. They reference internal Pardot object IDs and cannot be imported into Odoo. We export a machine-readable inventory of every Automation Rule during scoping (trigger type, filter criteria, actions, and completion actions) and include it in the automation rebuild document. Odoo Workflow triggers (on_create, on_write, on_state_change, server_action) are the native replacement.
Salesforce Marketing Cloud Account Engagement
Form
Odoo CRM
Documentation only
1:1Account Engagement Forms capture Prospect data and are tied to Landing Pages and Custom Fields via internal Pardot form IDs. We export form definitions (field labels, types, visibility rules, and thank-you message content) as a structured document. Odoo CRM does not have a native form builder in the standard CRM module; the customer's admin rebuilds forms using Odoo Studio or an external form tool such as Typeform, HubSpot Forms, or Gravity Forms that pushes submissions into Odoo Contacts via API or webhook.
Salesforce Marketing Cloud Account Engagement
Landing Page
Odoo CRM
Documentation only
1:1Landing Pages are static web assets hosted within or referencing Account Engagement. We export page HTML content and metadata (page name, URL slug, associated forms, and conversion tracking settings) as a structured reference document. Landing Page URLs are internal to Account Engagement and cannot be redirected to Odoo without a custom domain configuration. The customer's marketing team rebuilds landing pages in their preferred tool (Odoo Website builder, WordPress, or a dedicated landing page platform) using the exported content as a template.
Salesforce Marketing Cloud Account Engagement
Email Template
Odoo CRM
Email Template
1:1Account Engagement Email Templates contain HTML content, dynamic content blocks, and Pardot merge fields using double-brace syntax (%%first_name%%). We export template HTML and metadata, then rewrite merge field syntax from Pardot %%field_name%% to Odoo Jinja2 {{field_name}} format. Basic single-field substitutions migrate automatically. Dynamic content blocks with conditional branching logic are flagged for manual review and marketer-level rebuild in Odoo email template editor.
Salesforce Marketing Cloud Account Engagement
User / Assigned User / Owner
Odoo CRM
User (res.users)
1:1Account Engagement Users (Assigned Users / Owners) correspond to Salesforce Users who are responsible for Prospect records. We map Pardot user records to Odoo Users by email address. Account Engagement-only users without a corresponding Salesforce User are matched to Odoo users by email; users without a match go to a reconciliation queue for the customer's admin to provision before record import resumes. Pardot Business Unit assignment maps to Odoo Sales Team.
Salesforce Marketing Cloud Account Engagement
List / Static List
Odoo CRM
Tag
1:1Account Engagement Static Lists segment Prospects for targeted campaigns. We export list memberships and apply the list name as a Tag on each Contact in Odoo CRM. List-level metadata (name, description, created date) migrates as part of the tag documentation. Static list membership is preserved because tags on res.partner are the Odoo-native segmentation mechanism.
Salesforce Marketing Cloud Account Engagement
Dynamic List
Odoo CRM
Documentation only
1:1Dynamic Lists in Account Engagement are rule-based queries that generate a live membership list from Prospect criteria. Dynamic lists cannot be migrated as active lists because the rule syntax (field comparisons, operators, logical conditions) is Pardot-specific and has no Odoo equivalent. We export the list definition (criteria fields, operators, values) as part of the segmentation inventory document for the customer's admin to recreate using Odoo custom fields, tags, and domain filters.
Salesforce Marketing Cloud Account Engagement
Business Unit
Odoo CRM
Sales Team + Database partition
lossyAccount Engagement Business Units partition Prospect records, Users, and branding within a single instance. The Pardot API operates within a single Business Unit scope — there is no API endpoint to cross-query all BUs simultaneously. We scope each Business Unit as a separate migration project, export its Prospect records independently, and map each BU to a distinct Odoo Sales Team. Business Unit configuration (sender profiles, tracking domains, IP warm-up pools) does not migrate and is documented for manual configuration in the customer's email sending tool.
Salesforce Marketing Cloud Account Engagement
Tag
Odoo CRM
Tag
1:1Tags in Account Engagement are used for Prospect segmentation and are exported via the Pardot v5 API with tag definitions and their assignments per Prospect. Tags merge cleanly into Odoo CRM Tags on res.partner. We export the complete tag taxonomy (tag name, description, associated Prospect count) and apply all tag assignments during the Contact import phase.
Salesforce Marketing Cloud Account Engagement
Engagement: Call, Email, Meeting, Task
Odoo CRM
Task (crm.lead.activity)
1:1Account Engagement Visitor Activities (form fills, email opens, page views, link clicks) and CRM activities (calls, emails, meetings) migrate as Odoo CRM Activities linked to the Contact record. Each activity type maps to an Odoo activity category: calls to Call, emails to Email, meetings to Meeting, and form submissions to Upload Document. Note that Odoo CRM does not have a native visual engagement timeline for marketing interactions; activities land as CRM activity records rather than a Pardot-style engagement history panel.
Salesforce Marketing Cloud Account Engagement
Opportunity (Salesforce)
Odoo CRM
Opportunity (crm.lead)
1:1Account Engagement does not create or manage Opportunities internally — Opportunities live in Salesforce CRM. We export the linked Salesforce Opportunity ID stored on the Prospect record, along with Opportunity name, stage, amount, close date, and owner email. These map to Odoo CRM Leads (crm.lead) in the sales pipeline, with stage mapped to the Odoo CRM pipeline stage configuration. The Pardot opportunity_id is preserved in a custom field for audit purposes.
Salesforce Marketing Cloud Account Engagement
Custom Object
Odoo CRM
Custom Model (ir.model)
1:1Account Engagement Custom Objects are available from the Advanced+ tier upward and are exported via the Pardot v5 API. We pre-create a corresponding Odoo custom model (using Odoo Studio or directly via model definition) including all custom fields, field types, and any lookup relationships to res.partner. Custom object records import after parent Contact records to satisfy foreign key constraints. Validation rules defined in Odoo Studio are configured before import begins.
| Salesforce Marketing Cloud Account Engagement | Odoo CRM | Compatibility | |
|---|---|---|---|
| Prospect | Contact (res.partner)1:1 | Fully supported | |
| Account (Salesforce) | Company (res.partner, is_company=True)1:1 | Fully supported | |
| Scoring Category | CRM Taglossy | Fully supported | |
| Custom Field | Custom Field (res.partner or crm.lead)1:1 | Fully supported | |
| Campaign | Tag + CRM Lead1:1 | Fully supported | |
| Engagement Program | Documentation only1:1 | Fully supported | |
| Automation Rule | Documentation only1:1 | Fully supported | |
| Form | Documentation only1:1 | Fully supported | |
| Landing Page | Documentation only1:1 | Fully supported | |
| Email Template | Email Template1:1 | Fully supported | |
| User / Assigned User / Owner | User (res.users)1:1 | Fully supported | |
| List / Static List | Tag1:1 | Fully supported | |
| Dynamic List | Documentation only1:1 | Fully supported | |
| Business Unit | Sales Team + Database partitionlossy | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Engagement: Call, Email, Meeting, Task | Task (crm.lead.activity)1:1 | Fully supported | |
| Opportunity (Salesforce) | Opportunity (crm.lead)1:1 | Fully supported | |
| Custom Object | Custom Model (ir.model)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.
Salesforce Marketing Cloud Account Engagement gotchas
Engagement Programs and Automation Rules cannot be exported
Prospect contact volume limits enforced per tier
Email address is the sole unique identifier for Prospect matching
Multi-Business Unit accounts require separate migration scoping
Email Template merge fields use Pardot syntax incompatible with most destinations
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 scoping
We audit the source Account Engagement account across tier (Growth+, Plus+, Advanced+, Premium+), Business Unit count, Prospect volume, custom field schema (label, type, associated objects), Scoring Category definitions, active Engagement Studio programs and Automation Rules, email template count and merge field complexity, historical engagement volume, and any known data quality issues. We pair this with an Odoo edition assessment: CRM Standard ($25/user/month) covers most migrations; CRM Enterprise ($35/user/month) adds studio-based customisation and audit logs. The discovery output is a written migration scope that explicitly separates migratable records from documentation-only items and flags the automation rebuild project for separate scoping.
Schema design for Odoo
We design the Odoo destination schema before any data moves. This includes creating all custom fields on res.partner (Contact model) and crm.lead (Opportunity model) via Odoo Studio, with field types matched to the Pardot field type. We configure the CRM pipeline stages to reflect the Pardot Scoring Category taxonomy and map each Account Engagement Business Unit to a distinct Odoo Sales Team. Tags are pre-created to match the Pardot Scoring Category names and tag taxonomy. The schema is validated in an Odoo test database before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a test Odoo database using production-like data volume. The customer reconciles record counts (Contacts in, Companies in, Opportunities in, tags assigned, custom field values populated), spot-checks 25-50 random records against the Pardot source, and validates merge field rewrite output in email templates. Any mapping corrections — field type mismatches, missing tags, incorrectly assigned company records — are identified here and applied before production migration begins.
Owner reconciliation and user provisioning
We extract every distinct Pardot Assigned User and Business Unit pairing referenced on Prospect records and match by email address against the Odoo destination's res.users table. Users without a match go to a reconciliation queue. The customer's Odoo admin provisions any missing users and assigns them to the correct Sales Teams matching the Pardot Business Unit structure. Migration cannot proceed past Contact import until all required Owner references are resolvable in Odoo.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner with is_company=True, deduped by domain), Contacts (res.partner, deduped by email, with partner_id resolved to the parent company), Opportunities (crm.lead, with partner_id and team_id resolved), Tags (ir.attachment tags applied to Contacts), custom field values (x_studio_ fields populated per Contact and Opportunity), email template HTML (with merge field syntax rewritten), and CRM activities (calls, emails, meetings mapped from Pardot engagement records). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Account Engagement write access 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 rebuild inventory document — covering every Engagement Studio program, Automation Rule, Dynamic List, Form definition, and Landing Page with its trigger, conditions, actions, and recommended Odoo Workflow equivalent — to the customer's admin team. We support a two-week hypercare window where we resolve reconciliation issues raised by the sales team. We do not rebuild Engagement Studio programs as Odoo Workflow inside the migration scope; that work is scoped separately.
Platform deep dives
Salesforce Marketing Cloud Account Engagement
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Salesforce Marketing Cloud Account Engagement and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Salesforce Marketing Cloud Account Engagement and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Salesforce Marketing Cloud Account Engagement 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
Salesforce Marketing Cloud Account Engagement: Daily API quota varies by Account Engagement edition (tier); resets at start of day in the account's time zone. Maximum 5 concurrent requests per Business Unit. Exceeding the daily limit returns error code 122..
Data volume sensitivity
Salesforce Marketing Cloud Account Engagement 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 Salesforce Marketing Cloud Account Engagement to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Salesforce Marketing Cloud Account Engagement 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 Salesforce Marketing Cloud Account Engagement
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.