CRM migration

Migrate from Adobe Campaign to Twenty CRM

Field-level mapping, validation, and rollback between Adobe Campaign and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Adobe Campaign logo

Adobe Campaign

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

82%

9 of 11

objects map 1:1 between Adobe Campaign and Twenty CRM.

Complexity

BStandard

Timeline

4-7 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Adobe Campaign is an enterprise cross-channel marketing platform with per-active-profile licensing, three non-compatible editions, and an XML-schema data model that makes large-scale extraction complex. Twenty CRM is an open-source CRM built around a Person and Company model with a REST API and a growing field schema. The fundamental challenge of this migration is bridging a marketing automation platform's recipient-centric data model to a CRM's person-centric data model: Recipients become People with address and communication preferences preserved, while Adobe Campaign's delivery logs, tracking logs, and broadlog records map to Twenty's Activity records with the original send and engagement timestamps intact. We do not migrate Workflows, Sequences, dynamic content blocks, or campaign delivery templates as code; we deliver a written inventory of these objects for your admin to rebuild in Twenty CRM or a complementary tool. A critical pre-migration step is provisioning the full set of custom fields in Twenty CRM before data import begins, because Twenty's standard field schema is intentionally minimal and requires manual field creation that can take 30 to 60 minutes per data model.

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

Adobe Campaign logo

Adobe Campaign

What's pushing teams away

  • Steep learning curve and complex UI require significant internal training investment, pushing smaller teams toward simpler alternatives.
  • High enterprise cost with opaque pricing and per-active-profile billing creates budget pressure, especially as contact lists grow beyond initial contract estimates.
  • Known issues with analytics and reporting lag behind competitor expectations, making performance measurement and campaign attribution harder to surface.
  • API documentation gaps and version-specific restrictions make integrations and automations brittle and difficult to maintain without specialist developer support.
  • Landing page timeouts and slow load times in the web interface frustrate marketers who need to move quickly during campaign windows.

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 Adobe Campaign objects map to Twenty CRM

Each row shows how a Adobe Campaign 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.

Adobe Campaign

Recipient (nms:recipient)

maps to

Twenty CRM

Person

1:1
Fully supported

Adobe Campaign Recipient records map to Twenty CRM Person records. Core fields (firstName, lastName, email, phone, address) migrate directly. Extended fields from custom schema extensions land as custom properties on Person. The recipient's subscription status to Services maps to a custom boolean field subscribed__c or to the Person's workspace membership depending on the customer's preference.

Adobe Campaign

Address (nms:address)

maps to

Twenty CRM

Person (address fields)

1:1
Fully supported

Adobe Campaign stores delivery address in the nms:address linked table or as address fields on nms:recipient. We extract the postal address fields (street, city, state/province, postalCode, country) and map them to Twenty's address fields on Person. If the address exists as a separate address table record, we perform a LEFT JOIN on recipientId to attach the correct address to each Person.

Adobe Campaign

Company (schema-extended nms:recipient or custom org schema)

maps to

Twenty CRM

Company

1:1
Fully supported

Adobe Campaign does not have a native Company object equivalent to a CRM Account. If the customer has extended nms:recipient with an organization field or uses a linked organization schema, we extract the distinct organization values and create Company records in Twenty CRM. The organization field on each Recipient is then linked via a lookup to the corresponding Company. If no organization data exists, we derive Companies from the email domain as a fallback.

Adobe Campaign

Campaign (nms:campaign)

maps to

Twenty CRM

Opportunity

1:many
Fully supported

Adobe Campaign Campaign records (labels, type, start and end dates, budget, status) map to Twenty CRM Opportunity records with a custom field campaign_type__c set to 'Marketing Campaign'. A single Adobe Campaign can generate multiple Opportunities if it contains distinct revenue-aligned programs. Campaign metadata (label, type, dates) migrates as Opportunity fields; internal Adobe Campaign workflow orchestration does not migrate.

Adobe Campaign

Delivery (nms:delivery)

maps to

Twenty CRM

Activity (custom)

1:1
Fully supported

Adobe Campaign Delivery records (email sends, SMS, push notifications) map to Twenty CRM Activity records with a type field set to 'Delivery' and a custom status field carrying the Adobe Campaign deliveryStatus value. The broadlog count (number of recipients targeted) migrates as a custom field broadlog_count__c. Delivery routing parameters do not migrate because Twenty CRM has no sending infrastructure.

Adobe Campaign

Delivery Log (BroadLog / nms:broadLogRcp)

maps to

Twenty CRM

Activity

1:1
Fully supported

BroadLog records track every message sent per recipient per delivery. We map each BroadLog entry to an Activity record on the corresponding Person, with deliveryLabel as the activity subject and status mapping to the activity result. BroadLog records are extracted from the cloud database in v8 FFDA environments. We preserve the send timestamp and the internal Adobe Campaign contact date for campaign attribution.

Adobe Campaign

Tracking Log (NmsTrackingLog)

maps to

Twenty CRM

Activity

1:1
Fully supported

NmsTrackingLog records store open, click, and bounce events with timestamps and URLs. We map click events to Activity records with the target URL stored in a custom url__c field, and open events to Activity records with a type 'EmailOpened'. Bounce records map to a custom bounced__c boolean flag on the corresponding Activity. We preserve the original timestamp for chronological accuracy on the Person's timeline.

Adobe Campaign

Service (nms:service)

maps to

Twenty CRM

Workspace Membership (custom)

1:1
Fully supported

Adobe Campaign Services (opt-in subscription lists) do not have a direct Twenty CRM equivalent. We map each Service to a custom field on Person (e.g., newsletter_subscribed__c) with the subscriptionDate carried as a date value. If the customer has multiple Services, each becomes a separate custom boolean or date field on Person. Double-opt-in confirmation flags map as a secondary field.

Adobe Campaign

Program (nms:program)

maps to

Twenty CRM

Workspace or Folder (custom)

1:1
Fully supported

Adobe Campaign Programs are hierarchical containers for Campaigns in Standard and v8 editions. Program names and types migrate as custom fields on the related Campaign-Opportunity records. Folder and folder-permission structure does not migrate; we recommend a post-migration folder organization strategy using Twenty's workspace or custom field scoping.

Adobe Campaign

Custom Schema (nms:ext: namespace)

maps to

Twenty CRM

Custom Fields on Person or Company

lossy
Fully supported

Extended schemas (nms:ext: prefix or custom namespaces) represent fields added beyond the standard nms:recipient structure. We inspect the schema XML to derive the underlying field names and data types, then create equivalent custom fields in Twenty CRM before migration. Relationship fields from custom schemas that link to other tables require additional lookup field creation and must be resolved before Person import.

Adobe Campaign

Seed Address (nms:seedMember)

maps to

Twenty CRM

N/A

1:1
Fully supported

Seed addresses are internal testing records for proofing and do not migrate. They are instance-specific and tied to the Adobe Campaign sending infrastructure. We recommend rebuilding proofing workflows in Twenty CRM or a dedicated email testing tool post-migration.

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.

Adobe Campaign logo

Adobe Campaign gotchas

High

ACS to ACC schema migration breaks dynamic content blocks

High

Per-active-profile billing counts every imported Recipient

Medium

Technical operator IMS migration mandatory in v8.5+

Medium

v8 FFDA dual-database architecture complicates data mapping

Low

List export ceiling of 100,000 rows requires chunking

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

  • Twenty CRM requires manual custom field creation before import

    Twenty CRM intentionally ships with minimal standard fields on Person and Company. Users must spend 30 to 60 minutes creating basic fields (job title, industry, phone types, source, tags) before importing any data. This is not a migration-specific issue but a pair-specific risk: if custom fields do not exist in Twenty CRM before migration begins, imported Recipients land with critical data in unmapped fields that cannot be retroactively joined. We create the full field schema in Twenty CRM during the discovery phase before any data extraction from Adobe Campaign starts, and we validate the field count and types against the Adobe Campaign schema XML before declaring the schema phase complete.

  • Adobe Campaign v8 FFDA dual-database splits profile writes between local and cloud storage

    Campaign v8 uses a federated data access architecture where REST API profile writes land in a local PostgreSQL database and workflow operations write to a cloud database. The nms:recipient table in v8 exists in both databases, and tracking logs (NmsTrackingLog) live exclusively in the cloud. We query both databases and cross-reference by primary key to produce a single reconciled export set. Failing to reconcile the two databases results in split records where some fields on a Recipient are present in one database and missing in the other, causing data gaps in the imported Person records in Twenty CRM.

  • No direct marketing automation equivalent exists in Twenty CRM

    Adobe Campaign's core value is multi-channel campaign orchestration: email, SMS, push, and direct mail delivery with workflow-based targeting and segmentation. Twenty CRM has no native campaign execution, sending infrastructure, or workflow engine. Delivery logs, broadlog records, and tracking logs migrate as Activity history to preserve reporting continuity, but no sending, routing, or campaign execution capability moves to Twenty CRM. Teams should plan to use a dedicated sending tool (Mailchimp, SendGrid, or a comparable ESP) for campaign execution post-migration, and we include an ESP integration recommendation in the migration handoff document.

  • Per-active-profile billing means every imported Recipient counts toward Adobe's contract limits during migration

    Adobe Campaign licenses are priced per 1,000 Active Profiles. Any Recipient record imported into the platform, including those loaded for migration testing or staging, increments the Active Profile count under the current contract. We flag all test and staging imports during scoping and recommend performing full migration testing in a sandbox environment where possible. For production-phase imports, we sequence the migration to minimize the overlap window between active Adobe Campaign use and Twenty CRM go-live, so that the customer can reduce Adobe Campaign's active profile count before the contract renewal billing cycle.

  • Large Adobe Campaign profile sets require workflow-based chunked export

    Adobe Campaign Standard's list export feature caps output at 100,000 rows per export operation. Recipients sets exceeding this threshold must be exported via workflow-based data extraction using the Load file and Transfer file activities. We configure chunked workflow exports with date-based or ID-range filters to produce multiple files per export batch, combine them into a single import set, and deduplicate across chunks before loading into Twenty CRM. Classic v7 and v8 offer broader export options but still benefit from workflow-based extraction for record sets above 50,000 rows.

Migration approach

Six steps for a successful Adobe Campaign to Twenty CRM data migration

  1. Discovery and edition audit

    We audit the source Adobe Campaign instance across the active edition (Classic v7, Standard, or v8), the recipient count, the number of custom schema extensions, the volume of delivery logs and tracking logs, the count of active Campaigns and Services, and any linked FDA (Federated Data Access) tables. For v8 instances, we identify the FFDA split by querying both the local and cloud databases to confirm which tables exist where. We pair this with a Twenty CRM workspace audit to confirm the current field schema state, the user count, and any existing integrations. The discovery output is a written migration scope document with a recommended Twenty CRM custom field schema and a data extraction plan.

  2. Twenty CRM schema preparation

    We create all required custom fields in Twenty CRM before any Adobe Campaign data is extracted. This includes custom fields on Person for every schema-extended nms:recipient attribute, custom fields on Company for organization-level attributes, custom fields on Activity for delivery status, broadlog ID, tracking URL, and engagement type, and custom boolean fields for each Adobe Campaign Service subscription. We validate the field schema by performing a test import of a small sample set (50 records) and verifying that all expected fields populate correctly before proceeding to full-scale extraction.

  3. Adobe Campaign data extraction with edition-specific logic

    We extract data from Adobe Campaign using edition-appropriate methods. For Classic v7 and Standard, we use workflow-based data extraction (Query and Load file activities) with chunking filters to handle record sets above 100,000 rows. For v8, we run parallel queries against the local and cloud databases, reconcile by primary key, and produce a unified export set. We extract Recipients first (as the primary object), then delivery logs and tracking logs linked by recipientId, then campaign metadata, then service subscription records. Custom schema data is extracted as separate files and joined to the recipient export by ID before import.

  4. Sandbox import and reconciliation

    We run a full import into a Twenty CRM staging environment using production-like data volume. We reconcile record counts at each object layer (Persons in, Companies in, Activities in), spot-check 25 to 50 records against the Adobe Campaign source for field-level accuracy, and verify that custom fields created in step 2 are populated correctly. Any field mapping corrections, missing custom field additions, or data type adjustments happen in this phase before production migration begins. We also verify that the Person-to-Company lookup links are correct when organization data exists.

  5. Production migration in dependency order

    We run production migration in dependency order: Companies first (if deriving from email domain or organization field), then Persons (with Company lookup resolved), then Activities (linked to the imported Persons by email or ID). We use Twenty CRM's REST API with cursor pagination and apply exponential backoff on rate limit responses. Each phase emits a row-count reconciliation report before the next phase begins. We freeze writes in Adobe Campaign during the cutover window and run a final delta migration of any records modified during the migration window before declaring cutover complete.

  6. Cutover, validation, and workflow rebuild handoff

    We enable Twenty CRM as the system of record, verify a sample of 100 to 200 records against the Adobe Campaign source for final accuracy, and deliver a written inventory of all Adobe Campaign Workflows, Sequences, dynamic content blocks, and delivery templates with recommendations for rebuilding each in Twenty CRM or an alternative tool. We support a one-week hypercare window for reconciliation issues. We do not rebuild Adobe Campaign Workflows as automations inside Twenty CRM; that scope requires a separate engagement focused on workflow design and tool selection.

Platform deep dives

Context on both ends of the pair

Adobe Campaign logo

Adobe Campaign

Source

Strengths

  • Comprehensive multi-channel coverage (email, SMS, push, direct mail, WhatsApp) in a single platform reduces point-solution sprawl.
  • Federated Data Access connectors allow live query of external databases without full data replication.
  • Visual workflow engine with targeting, segmentation, and approval gates handles complex campaign orchestration.
  • XML-schema extensibility allows enterprises to model custom business objects beyond standard CRM profiles.
  • Strong deliverability infrastructure with dedicated IP warming and inbox placement tooling built into Managed Cloud tiers.

Weaknesses

  • Three active editions (Classic v7, Standard, v8) with non-compatible schema structures complicate migrations and upgrades.
  • Per-active-profile licensing means every imported record affects billing, with no concept of a truly inactive record for billing purposes.
  • No published API rate limits and limited bulk REST API coverage means large-scale data extraction requires workflow-based exports.
  • Steep onboarding and specialist skill requirements make internal teams dependent on Adobe partners for routine operations.
  • Analytics and reporting are widely cited as below enterprise expectations, especially compared to Adobe Analytics integration.
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 Adobe Campaign 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

    B

    Adobe Campaign: Not publicly documented; throughput limits are contract-specific and enforced at the infrastructure level.

  • Data volume sensitivity

    B

    Adobe Campaign doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Adobe Campaign 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 Adobe Campaign to Twenty CRM data migrations

Answers to the questions buyers ask most during Adobe Campaign to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Adobe Campaign to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and seven weeks for accounts under 20,000 Recipients, 500 Campaigns, and 100,000 engagement records with a straightforward schema. Migrations with Adobe Campaign v8 FFDA dual-database reconciliation, large tracking log volumes (over 500,000 records), multiple custom schemas, or FDA-linked external tables move to ten to sixteen weeks. The Twenty CRM schema preparation phase (creating custom fields) is on the critical path and typically takes three to five business days depending on the number of schema extensions.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Adobe Campaign.
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