CRM migration
Field-level mapping, validation, and rollback between Salesforce Marketing Cloud Account Engagement and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Salesforce Marketing Cloud Account Engagement
Source
Twenty CRM
Destination
Compatibility
8 of 11
objects map 1:1 between Salesforce Marketing Cloud Account Engagement and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Salesforce Marketing Cloud Account Engagement to Twenty CRM is a migration from a Salesforce-native marketing automation layer into a standalone sales CRM. Marketing Cloud Account Engagement does not own accounts or opportunities — it manages Prospects that sync bidirectionally with Salesforce CRM — while Twenty CRM is a unified sales platform where Contacts, Companies, and Deals live in one system. We extract Prospects and their associated Custom Fields, Tags, Scoring Categories, and email template content from Account Engagement via the Pardot v5 API, then load them into Twenty Contacts and Companies with the email address as the dedupe key. Engagement Programs and Automation Rules reference internal Pardot IDs that do not exist in Twenty and cannot migrate; we deliver a written inventory of every program with trigger conditions and action sequences for your team to rebuild in Twenty's task and sequence features. Forms and Landing Pages are documented for manual recreation. We do not migrate workflows or sequences as code; these are flagged and delivered as a rebuild scope.
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 Twenty 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
Twenty CRM
Contact
1:1Prospects are the core object in Account Engagement and map directly to Twenty CRM Contacts. The Pardot v5 API returns Prospects with their Custom Field values, Tags, and Scoring Category assignments. We use the email address field (email) as the dedupe key during import, applying a three-pass strategy: exact email match, normalised match (stripped of case and punctuation), then flagged for manual resolution. Any Salesforce Contact ID stored on the Prospect record is preserved in a custom field sf_contact_id__c for reference. Prospect status, source, and campaign attribution migrate as Contact standard fields or custom fields.
Salesforce Marketing Cloud Account Engagement
Account (Salesforce CRM sync)
Twenty CRM
Company
1:1Account Engagement does not have a native Account object — Prospects are associated to Accounts via the Salesforce CRM sync. If Salesforce Accounts and Opportunities are co-migrated, we map them to Twenty CRM Companies and Deals respectively. The Salesforce Account Name becomes the Twenty Company name, and the Account Website, Industry, and Phone migrate as Company fields. If no Salesforce CRM data is included in scope, we create Companies from the Prospect's company name field with the company domain used to enrich records via the Twenty API.
Salesforce Marketing Cloud Account Engagement
Contact (Salesforce CRM sync)
Twenty CRM
Contact
1:1When Salesforce Contacts are co-migrated alongside Prospects, we deduplicate by email address — a Contact with the same email as a migrated Prospect merges into the existing Contact record rather than creating a duplicate. The Salesforce Contact's Title, Phone, and custom fields migrate as Contact standard and custom fields. Owner mapping resolves the Salesforce User email to a Twenty user by email match; any unresolved Owner is held in a reconciliation queue for admin provisioning.
Salesforce Marketing Cloud Account Engagement
Opportunity (Salesforce CRM sync)
Twenty CRM
Deal
1:1Account Engagement does not manage Opportunities internally — they live in Salesforce CRM and are referenced on Prospects. If Salesforce Opportunities are in scope, we map them to Twenty CRM Deals with the Opportunity Name as Deal name, Amount, CloseDate, and StageName mapped to Twenty's Deal amount, close_date, and stage fields. Salesforce Opportunity custom fields migrate as Twenty Deal custom fields. The linked Account maps to the Twenty Company via the Company lookup.
Salesforce Marketing Cloud Account Engagement
Campaign
Twenty CRM
Custom Object or Tag
lossyAccount Engagement Campaigns track marketing initiative performance and link to Salesforce Campaigns. We export Campaign metadata (name, type, status, start and end dates, budget cost) and Prospect-level activity data per Campaign. In Twenty CRM, we create a Campaign custom object with name, type, start_date, and budget fields, then link Contacts via a Campaign custom relationship field. Prospect-level engagement data (opens, clicks, form submissions) attaches to the Contact record as a tagged activity log. If the customer prefers a lighter-weight approach, Campaign names migrate as Tags on the Contact records.
Salesforce Marketing Cloud Account Engagement
Custom Field
Twenty CRM
Custom Field
1:1Custom Fields are first-class objects in the Pardot v5 API with full CRUD support. We export all Custom Field definitions — label, type, associated Tags — and their values per Prospect record. Field types (text, date, numeric, dropdown, checkbox) map to their equivalent Twenty CRM custom field types. Custom field values migrate as rows against the Contact record during the Prospects import phase. Field-level validation rules in Account Engagement are noted for admin reference but do not enforce in Twenty without equivalent configuration.
Salesforce Marketing Cloud Account Engagement
Tag
Twenty CRM
Tag
1:1Tags in Account Engagement are used for Prospect segmentation and attach to Prospects and Custom Fields. We export tag definitions and their assignments per Prospect. Tags merge cleanly into Twenty CRM as Contact Tags. During import, each tag is applied to the corresponding Contact record. Tags used for marketing segmentation become Sales Tags in Twenty — the customer's team assigns sales-stage and segment-based meanings post-migration.
Salesforce Marketing Cloud Account Engagement
Scoring Category
Twenty CRM
Custom Field (numeric)
lossyScoring Categories in Account Engagement define named buckets for categorising prospect scores (e.g., behavioural score versus demographic score). We export category definitions and their weight rules as numeric values per Prospect. Each Scoring Category becomes a numeric custom field on the Twenty CRM Contact record (e.g., behavioural_score__c, demographic_score__c). Scoring logic is not recalculated at the destination — the exported numeric values are the final score at migration time. If Einstein AI scoring is in use, the absolute score migrates as a read-only custom field; rebuilding the predictive model in Twenty is outside standard scope.
Salesforce Marketing Cloud Account Engagement
List and Segment
Twenty CRM
Group or Tag
1:manyStatic Lists in Account Engagement segment Prospects for targeted campaigns. We export list memberships as Contact-tag associations. Each static list becomes a Group in Twenty CRM with the members listed. Dynamic Lists with rule-based criteria cannot migrate as active lists because the rule engine differs between platforms; we export the list criteria as a written definition document for the customer to rebuild as a filter or segment in Twenty. List-level engagement statistics (send volume, open rate) are noted for reporting rebuild reference.
Salesforce Marketing Cloud Account Engagement
Email Template
Twenty CRM
Email Template
1:1Email Templates contain HTML content, dynamic content blocks, and merge fields. We export template HTML and metadata. The primary technical challenge is that Pardot uses double-brace merge field syntax (%%first_name%%) which differs from Twenty's template syntax. We rewrite standard merge fields as part of the export step, mapping %%first_name%% to the equivalent Twenty contact field token. Templates with complex branching logic, dynamic content blocks, or conditional display rules are flagged for manual review and reconstruction at the destination because these cannot be reliably automated across platform syntaxes.
Salesforce Marketing Cloud Account Engagement
Engagement Program and Automation Rule
Twenty CRM
Manual rebuild required
1:1Engagement Programs and Automation Rules in Account Engagement reference Prospects, Campaigns, Forms, and Landing Pages by internal Pardot IDs that do not exist in Twenty CRM. We do not migrate them as code. During scoping, we document the existing program structure — trigger conditions, step sequences, completion actions, wait conditions, and exit criteria — in a written inventory with a recommended Twenty equivalent (task sequences, manual follow-up workflows, or a third-party sales engagement tool if the customer chooses one). The customer's team rebuilds the programs post-migration based on the inventory document.
| Salesforce Marketing Cloud Account Engagement | Twenty CRM | Compatibility | |
|---|---|---|---|
| Prospect | Contact1:1 | Fully supported | |
| Account (Salesforce CRM sync) | Company1:1 | Fully supported | |
| Contact (Salesforce CRM sync) | Contact1:1 | Fully supported | |
| Opportunity (Salesforce CRM sync) | Deal1:1 | Fully supported | |
| Campaign | Custom Object or Taglossy | Fully supported | |
| Custom Field | Custom Field1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Scoring Category | Custom Field (numeric)lossy | Fully supported | |
| List and Segment | Group or Tag1:many | Fully supported | |
| Email Template | Email Template1:1 | Fully supported | |
| Engagement Program and Automation Rule | Manual rebuild required1: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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and scoping
We audit the Account Engagement environment across Business Units, Prospect volume, Custom Field definitions, Scoring Categories, active Engagement Programs, email template library, Forms, Landing Pages, and list/segment memberships. If Salesforce CRM data is co-migrated, we also audit Accounts, Contacts, Opportunities, and Campaigns. We produce a written migration scope that identifies the data that migrates, the data that documents for manual rebuild, and the data that is archived rather than migrated. The scoping call explicitly covers which Prospects should land as Twenty Contacts versus archived records and whether Salesforce co-migration is in scope.
Schema design and merge field mapping
We design the destination schema in Twenty CRM. This includes provisioning all custom fields (mapped from Account Engagement Custom Field definitions), configuring Groups for list migration, creating the Campaign custom object if applicable, and setting up Tags. We produce a merge field mapping table that translates each Pardot %%field_name%% token to the equivalent Twenty contact field token for every email template. Complex templates with branching logic are flagged for manual rewrite during this phase. The schema is validated in Twenty's sandbox or a test environment before production data moves.
Data export and transform
We export Prospect records from Account Engagement via the Pardot v5 API using the selected Business Unit scope. Exports include all standard fields, Custom Field values, Tags, Scoring Category scores, Campaign membership, and list membership. The three-pass email matching strategy (exact, normalised, flagged) is applied during the transform phase. Any Salesforce Account and Contact data in scope is exported from Salesforce via the Bulk API. Transformed records are validated against the source export before any destination load begins. Duplicate Prospects by email are reconciled with the customer before import.
Sandbox migration and reconciliation
We run a full migration into Twenty CRM using production-like data volume as a validation pass. The customer's RevOps lead reviews record counts, spot-checks 25-50 random Contacts against the Account Engagement source records, and validates custom field values and Tags. Any mapping corrections identified during sandbox validation are applied to the production migration script. Sandbox sign-off is required before production migration begins. This step also serves as the Engagement Program inventory review, where the customer confirms the documented program structure matches their expectations.
Production migration in dependency order
We run production migration in record-dependency order: Companies first (from Salesforce Account data or Prospect company_name), then Contacts (with Company lookup resolved, email dedupe applied, Tags and custom fields attached), Deals (with Company lookup resolved), then Campaign custom object data, then email templates (with merge fields rewritten). Each phase emits a row-count reconciliation report before the next phase begins. We use the Twenty CRM API with rate-limit handling and exponential backoff for all inserts. Engagement Program documentation and Form/Landing Page inventory are delivered as separate documents alongside the data migration.
Cutover, delta sync, and rebuild handoff
We freeze Account Engagement writes during the cutover window, run a final delta migration of any records modified during the migration period, then mark Twenty CRM as the system of record for the migrated scope. We deliver the Engagement Program rebuild inventory, the Form and Landing Page recreation guide, and the Scoring Category definition table. We support a one-week hypercare window where we resolve any data quality issues raised during the first week of production use. We do not rebuild Engagement Programs as Twenty sequences inside the migration scope; that is a separate engagement or an internal admin task based on the delivered inventory.
Platform deep dives
Salesforce Marketing Cloud Account Engagement
Source
Strengths
Weaknesses
Twenty 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 Salesforce Marketing Cloud Account Engagement and Twenty 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
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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Salesforce Marketing Cloud Account Engagement to Twenty 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 Twenty 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.