CRM migration

Migrate from Marketing Optimizer to Twenty CRM

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

Marketing Optimizer logo

Marketing Optimizer

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Marketing Optimizer and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Marketing Optimizer to Twenty CRM is a structural migration that separates the lead-selling-specific platform from a general-purpose open-source CRM. Marketing Optimizer models leads with a lifecycle tied to buyer/seller assignment; Twenty CRM uses a generic contact model with customizable fields and pipelines. We preserve the original lifecycle stage as a custom Contact property, resolve the dependency chain (Accounts before Contacts before Opportunities), and migrate web tracking data as normalized custom fields. The platform's automated workflows and attachment storage are not accessible via API — we document both as migration artifacts and recommend manual export and rebuild steps. Twenty's self-hosted Docker architecture is a deployment choice that sits outside the migration data scope but determines the operational model your team adopts post-migration.

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

Marketing Optimizer logo

Marketing Optimizer

What's pushing teams away

  • Feature density creates a steep onboarding curve; teams report it takes significant time to become comfortable with the full interface.
  • Limited integration ecosystem compared to major CRMs means teams with Unbounce or VWO as their only connectors hit walls fast.
  • Small review sample and minimal market presence make it difficult to validate long-term vendor viability and support quality.

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 Marketing Optimizer objects map to Twenty CRM

Each row shows how a Marketing Optimizer 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.

Marketing Optimizer

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Marketing Optimizer Contact records map 1:1 to Twenty CRM Person records. Name, email, phone, and company linkage migrate to the corresponding Person fields. The Email field serves as the dedupe key during import. Companies must be imported first so that the Person-Company relationship resolves at insert time rather than requiring a post-import link fix.

Marketing Optimizer

Lead

maps to

Twenty CRM

Person (custom lifecycle field)

1:1
Fully supported

Marketing Optimizer Lead records carry a lifecycle stage tied to the lead-selling workflow (buyer assignment, seller routing, sold status). Twenty CRM has no native Lead object with a lead-selling lifecycle model. We preserve the original lifecycle stage as a custom field (mo_original_lifecycle__c) on the Person record, and the customer decides during scoping whether to normalize the stages into Twenty's opportunity pipeline stages or retain them as a read-only audit field. Lead assignment records (which buyer or internal user owns the lead) migrate as a linked custom field on the Person.

Marketing Optimizer

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Marketing Optimizer Company records map directly to Twenty CRM Company. Company name, domain, address, and industry fields migrate 1:1. The domain becomes the Company Website field and is used as the dedupe key during import. Companies are imported before Persons so that Person records can link to their parent Company via the Twenty relationship model at insert time.

Marketing Optimizer

Campaign

maps to

Twenty CRM

Opportunity (Campaign category)

1:1
Fully supported

Marketing Optimizer Campaign records (name, type, associated contacts) map to Twenty CRM Opportunity records with a Category field set to Campaign. The associated contact links migrate as PersonActivity relations in Twenty. Campaign performance metrics (if any exist in Marketing Optimizer's reporting layer) are preserved as custom fields on the Opportunity.

Marketing Optimizer

Automated Workflow

maps to

Twenty CRM

Workflow (documented for rebuild)

lossy
Fully supported

Marketing Optimizer automated workflows define lead routing, scoring, and action triggers. The platform does not expose workflow definitions in a transferable format. We extract the trigger conditions, filter logic, and action sequences as a written migration artifact. The customer or their Twenty implementation partner rebuilds each workflow in Twenty's workflow builder. We do not migrate workflow logic as code.

Marketing Optimizer

Web Tracking Data

maps to

Twenty CRM

Custom fields on Person

lossy
Mapping required

Marketing Optimizer tracks pages visited and time on site per contact. This data migrates as a custom multi-value field or a structured set of custom fields on the Twenty CRM Person record. We normalize the page-visit history into a text array or JSON field depending on the customer's reporting needs. The destination field strategy is chosen during scoping based on how the customer intends to use the data.

Marketing Optimizer

Lead Assignment

maps to

Twenty CRM

Custom field on Person

1:1
Fully supported

Marketing Optimizer assignment records map a lead to a specific buyer or internal user. Since Twenty CRM does not have a separate assignment object, we migrate these as a custom field (mo_assigned_buyer__c or mo_assigned_user__c) on the Person record. If the buyer or user is also a Twenty CRM User, we link to that User record via a lookup field; otherwise the field stores the original identifier as a string.

Marketing Optimizer

Custom Fields

maps to

Twenty CRM

Custom fields on target objects

lossy
Mapping required

Any custom fields added by the customer in Marketing Optimizer require field-level mapping to Twenty CRM's schema. We document all custom field names, data types, and picklist values during scoping, then pre-create the corresponding custom fields in Twenty before any data import begins. Multi-select picklists from Marketing Optimizer map to Twenty multi-select fields or tag-style custom fields depending on the customer's chosen data model.

Marketing Optimizer

Attachments

maps to

Twenty CRM

Not migrated

1:1
Not supported

Attachments associated with contact or lead records are not accessible via Marketing Optimizer's documented API. We flag all records with attachments during scoping and recommend the customer exports them manually via direct platform access before the migration window closes. Failure to do this results in permanent attachment data loss. We do not attempt API-based attachment extraction for this platform.

Marketing Optimizer

Owner

maps to

Twenty CRM

Workspace User

1:1
Fully supported

Marketing Optimizer Owners (users assigned to leads, contacts, and deals) map to Twenty CRM Users. We resolve by email match. Any Owner without a matching Twenty User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Inactive or archived owners are imported as inactive Users to preserve the assignment history.

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.

Marketing Optimizer logo

Marketing Optimizer gotchas

Medium

Lead lifecycle stages do not map directly to standard CRM lead statuses

Medium

Workflow automation logic must be rebuilt in the destination platform

High

Attachments are not accessible via documented API

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

  • Attachments are not accessible via Marketing Optimizer API

    Files attached to contact or lead records in Marketing Optimizer are not retrievable via the documented API endpoints. We flag all attachment-dependent records during scoping, document which records have attachments, and recommend the customer exports them manually via direct platform access before the migration window closes. This is a permanent data gap that cannot be resolved by any migration tooling operating through the API alone. Teams that do not perform the manual export before cutover will lose attachment data permanently.

  • Lead lifecycle stages are lead-selling-specific and require custom field mapping

    Marketing Optimizer's lifecycle stages (buyer assignment, seller routing, sold, etc.) are tied to the lead-selling workflow model and have no direct equivalent in Twenty CRM's generic data model. We preserve the original lifecycle stage value as a custom field (mo_original_lifecycle__c) on the Person record, but the customer must decide whether to build a custom pipeline stage model in Twenty that reflects the lead-selling workflow or treat the original lifecycle value as read-only audit data. Skipping this design decision means the lifecycle history becomes opaque in the destination.

  • Automated workflows must be rebuilt in Twenty's workflow builder

    Marketing Optimizer automated workflows (lead routing, scoring, action triggers) are platform-specific and are not exposed in a transferable format via the API. We document every active workflow with its trigger conditions, filter logic, and action sequence as a written migration artifact. The customer's admin or a Twenty implementation partner rebuilds each workflow in Twenty's workflow builder post-migration. We do not migrate workflow logic as code.

  • Twenty CRM lacks native sequencing and cadence features

    Twenty CRM does not currently offer a native sequence or sales engagement cadence feature. Teams migrating from Marketing Optimizer that relied on automated follow-up sequencing will need to either build a manual follow-up workflow in Twenty's workflow builder or integrate a third-party sales engagement tool. We flag any sequencing dependencies in Marketing Optimizer during scoping and document them in the automation rebuild artifact.

  • Self-hosting Docker dependency requires operational setup

    Twenty CRM's self-hosted deployment requires Docker. Teams transitioning from Marketing Optimizer's SaaS-only model will need to set up and maintain their own hosting environment if they choose the self-hosted path. This is an infrastructure decision separate from the data migration scope. We flag the hosting model decision at the start of engagement and do not configure Docker environments as part of the migration.

Migration approach

Six steps for a successful Marketing Optimizer to Twenty CRM data migration

  1. Discovery and scoping

    We audit the Marketing Optimizer account across all accessible objects: Contact count, Lead count with lifecycle stage distribution, Company count, Campaign records, custom field definitions, active workflow count and logic, web tracking data volume, and attachment-dependent records. We pair this with Twenty CRM scoping to confirm the target workspace, API credentials, and whether the destination is a Twenty-hosted or self-hosted instance. The discovery output is a written migration scope document with record counts, custom field inventory, and a hosting model confirmation.

  2. Schema design in Twenty CRM

    We design the destination schema in Twenty CRM. This includes creating custom fields to preserve lead lifecycle stages (mo_original_lifecycle__c), lead assignment links (mo_assigned_buyer__c), and any web tracking data fields that cannot map to standard Twenty fields. We configure the Company and Person relationship model, set up Opportunity Record Types if multiple pipeline types exist, and deploy schema changes into the Twenty workspace before any data import begins.

  3. Owner and user reconciliation

    We extract every distinct Owner referenced on Contact, Lead, and Campaign records from Marketing Optimizer and match by email against Twenty CRM Users. Any Owner without a matching Twenty User enters a reconciliation queue. The customer's admin provisions missing Users in Twenty before record import begins. This step is required because OwnerId references must be valid at insert time in Twenty's data model.

  4. Data migration in dependency order

    We run production migration in record-dependency order: Companies (first, as the parent object), then Contacts and Leads (with lifecycle stage preserved as a custom field and Company relationship resolved), then Campaigns mapped to Opportunities, then web tracking data as custom Person fields, then Lead assignment records as linked custom fields, then custom field data. Each phase emits a row-count reconciliation report before the next phase begins.

  5. Manual attachment export coordination

    We identify all records with attachments during the discovery phase and deliver a list of affected record IDs to the customer before migration. The customer performs a manual export of all attachments from Marketing Optimizer via direct platform access. We provide a recommended folder structure and naming convention aligned with the migrated record IDs so that the exported files can be re-linked post-migration if the customer's Twenty instance supports file attachment to Person records.

  6. Sandbox migration and validation

    If the Twenty destination supports a staging environment, we run a full migration into that environment before production cutover. The customer's team reconciles record counts and spot-checks 25-50 random records against the Marketing Optimizer source. Any mapping corrections happen in the staging environment, not in production. This step validates the lifecycle stage preservation logic, the Company-Person relationship resolution, and the custom field normalization.

  7. Production cutover and automation rebuild handoff

    We freeze Marketing Optimizer writes during cutover, run a final delta migration of records modified during the migration window, then enable Twenty CRM as the system of record. We deliver the automation rebuild artifact (documented workflows and sequences with trigger conditions, filter logic, and recommended Twenty equivalents) to the customer's admin. We support a one-week hypercare window for reconciliation issues. We do not rebuild Marketing Optimizer workflows as Twenty workflow logic inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

Marketing Optimizer logo

Marketing Optimizer

Source

Strengths

  • Consolidates lead buying, selling, and tracking in a single platform rather than multiple tools.
  • Automatic lead addition and assignment reduce manual work for high-volume lead operations.
  • Built-in reporting surfaces lead source and buyer performance without additional BI tooling.

Weaknesses

  • Minimal market footprint with no active G2 profile or TrustRadius presence limits external validation.
  • Small review sample of 7 Capterra reviews makes aggregate satisfaction hard to assess reliably.
  • Limited documented integrations beyond Unbounce and VWO Testing constrains broader stack connectivity.
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. 3 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 Marketing Optimizer and Twenty CRM.

  • Object compatibility

    B

    3 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

    Marketing Optimizer: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Marketing Optimizer 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 Marketing Optimizer to Twenty CRM data migrations

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

Can't find your answer?

Walk through your Marketing Optimizer 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 three and five weeks for accounts under 10,000 Contacts and 2,000 Leads with a straightforward custom field set and no multi-pipeline setup. Migrations with high-volume web tracking histories, multiple custom fields, lead assignment record complexity, or customer-managed Docker hosting setup move to six to ten weeks because of schema design, lifecycle stage preservation logic, and the manual attachment export coordination required.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Marketing Optimizer.
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