CRM migration

Migrate from Salesforce Marketing Cloud Account Engagement to Twenty CRM

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 logo

Salesforce Marketing Cloud Account Engagement

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

73%

8 of 11

objects map 1:1 between Salesforce Marketing Cloud Account Engagement and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Salesforce Marketing Cloud Account Engagement logo

Salesforce Marketing Cloud Account Engagement

What's pushing teams away

  • Steep learning curve and complex UI require dedicated training or consultant hours before teams can build sophisticated automations without trial-and-error.
  • High total cost of ownership beyond the license fee — agencies, developers, or additional consultants are frequently needed to configure and optimize campaigns at scale.
  • Contact volume limits by tier create billing surprises — teams that outgrow their tier's Prospect cap are forced to upgrade or pay overage fees, and there is no prorated credit for downgrades.
  • Limited flexibility for non-Salesforce CRMs — Account Engagement is architecturally tied to Salesforce, making it a poor fit for teams running HubSpot, Zoho, or Microsoft Dynamics as their CRM of record.
  • The platform's complexity creates slow time-to-value — even straightforward tasks like form creation or list segmentation require navigating multiple menu layers and configuration screens.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Salesforce Marketing Cloud Account Engagement objects map to Twenty CRM

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

maps to

Twenty CRM

Contact

1:1
Fully supported

Prospects 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)

maps to

Twenty CRM

Company

1:1
Fully supported

Account 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)

maps to

Twenty CRM

Contact

1:1
Fully supported

When 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)

maps to

Twenty CRM

Deal

1:1
Fully supported

Account 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

maps to

Twenty CRM

Custom Object or Tag

lossy
Fully supported

Account 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

maps to

Twenty CRM

Custom Field

1:1
Fully supported

Custom 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

maps to

Twenty CRM

Tag

1:1
Fully supported

Tags 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

maps to

Twenty CRM

Custom Field (numeric)

lossy
Fully supported

Scoring 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

maps to

Twenty CRM

Group or Tag

1:many
Fully supported

Static 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

maps to

Twenty CRM

Email Template

1:1
Fully supported

Email 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

maps to

Twenty CRM

Manual rebuild required

1:1
Fully supported

Engagement 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.

Gotchas + challenges

What specifically takes care here

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 logo

Salesforce Marketing Cloud Account Engagement gotchas

High

Engagement Programs and Automation Rules cannot be exported

High

Prospect contact volume limits enforced per tier

High

Email address is the sole unique identifier for Prospect matching

Medium

Multi-Business Unit accounts require separate migration scoping

Medium

Email Template merge fields use Pardot syntax incompatible with most destinations

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Email address is the sole Prospect unique identifier

    Account Engagement uses email address as the primary key for Prospect identity and deduplication. There is no stable external ID equivalent that survives export. When migrating from a source with different records per email address, we apply a three-pass matching strategy — exact email match, normalised email match (stripped of case and punctuation), then flagged for manual resolution — but we cannot guarantee a deterministic outcome when multiple Prospects share the same email address. Teams with duplicate Prospects by email should resolve these in Account Engagement before migration begins to avoid silent merges on import.

  • Engagement Programs and Automation Rules are not migratable

    Pardot automation rules and Engagement Programs reference internal Pardot object IDs that do not exist in Twenty CRM. The programs have no export path regardless of destination platform. We document the existing program structure — triggers, step sequences, wait conditions, and completion actions — in a written rebuild inventory during scoping. The customer's team reconstructs these as task sequences or manual workflows in Twenty post-migration. We do not migrate automation rules as part of a standard migration and flag them explicitly in the scoping report.

  • Pardot merge field syntax requires manual rewrite

    Account Engagement uses double-brace syntax (%%first_name%%) for merge fields in email templates, which differs from standard CRM template syntax and from Twenty's template engine. We rewrite common merge fields during template export, mapping Pardot field names to Twenty field tokens. However, dynamic content blocks, conditional logic, and nested merge field expressions cannot be reliably automated across platform syntaxes and are flagged for marketer-level manual reconstruction. Templates with complex branching logic require a dedicated template review step before import.

  • Multi-Business Unit accounts require separate scoping

    Account Engagement Business Units partition Prospect records, Users, and branding. The Pardot v5 API operates within a single Business Unit scope — there is no endpoint to cross-query all Business Units simultaneously. Each Business Unit is scoped as a separate migration project with its own Prospect export, Custom Field export, and configuration review. Business Unit-level settings (sender profiles, tracking domains, IP warm-up pools) are documented and manually reconfigured in Twenty or in the customer's email sending infrastructure post-migration.

  • Data cleanup consumes significant migration effort

    Research on Salesforce and Account Engagement migrations indicates that duplicates, incomplete records, and outdated information that users have learned to work around cause significant problems during migration. Industry guidance estimates data cleanup at 20-30% of total project effort. We include a data quality audit in the discovery phase that flags duplicate Prospects by email, Prospects with missing email addresses, inactive records, and records with stale engagement history that should be archived rather than migrated. Cleanup decisions are made with the customer before migration begins.

Migration approach

Six steps for a successful Salesforce Marketing Cloud Account Engagement to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Salesforce Marketing Cloud Account Engagement logo

Salesforce Marketing Cloud Account Engagement

Source

Strengths

  • Salesforce-native bidirectional CRM sync keeps Prospect and Contact data aligned without manual export.
  • Einstein AI lead scoring from the Plus tier onwards prioritises high-intent Prospects automatically.
  • Engagement Studio enables visual, multi-step B2B nurture sequences without developer involvement.
  • B2B-specific data model — Grading, Scoring Categories, and multi-touch attribution — reflects complex buying committees.
  • Diverse pricing tiers from Growth through Premium+ serve startups through enterprise marketing teams.

Weaknesses

  • Engagement Programs and Automation Rules are not exportable, requiring full manual rebuild at the destination.
  • Steep learning curve demands ongoing admin investment or agency fees to configure and maintain effectively.
  • Contact volume limits by tier create billing surprises when teams exceed their included Prospect count.
  • Limited value outside the Salesforce ecosystem — poor fit for HubSpot, Zoho, or Microsoft Dynamics CRM environments.
  • Complex UI with multiple navigation layers slows day-to-day tasks for non-technical marketing users.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

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

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    C

    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

    A

    Salesforce Marketing Cloud Account Engagement exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Salesforce Marketing Cloud Account Engagement to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Salesforce Marketing Cloud Account Engagement to Twenty CRM data migrations

Answers to the questions buyers ask most during Salesforce Marketing Cloud Account Engagement to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Standalone MCAE migrations under 20,000 Prospects with straightforward custom fields land between two and four weeks. Migrations with over 50,000 Prospects, multiple Scoring Categories, Salesforce co-migration (Accounts, Contacts, Opportunities), and a large email template library extend to five to eight weeks. Data cleanup — which research indicates typically consumes 20-30% of project effort — is the most common timeline variable. Business Unit accounts add one to two weeks per additional Business Unit because each requires a separate export scope and configuration review.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Salesforce Marketing Cloud Account Engagement.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day