CRM migration
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
Source
Twenty CRM
Destination
Compatibility
7 of 10
objects map 1:1 between Marketing Optimizer and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
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 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
Twenty CRM
Person
1:1Marketing 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
Twenty CRM
Person (custom lifecycle field)
1:1Marketing 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
Twenty CRM
Company
1:1Marketing 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
Twenty CRM
Opportunity (Campaign category)
1:1Marketing 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
Twenty CRM
Workflow (documented for rebuild)
lossyMarketing 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
Twenty CRM
Custom fields on Person
lossyMarketing 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
Twenty CRM
Custom field on Person
1:1Marketing 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
Twenty CRM
Custom fields on target objects
lossyAny 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
Twenty CRM
Not migrated
1:1Attachments 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
Twenty CRM
Workspace User
1:1Marketing 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.
| Marketing Optimizer | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Lead | Person (custom lifecycle field)1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Campaign | Opportunity (Campaign category)1:1 | Fully supported | |
| Automated Workflow | Workflow (documented for rebuild)lossy | Fully supported | |
| Web Tracking Data | Custom fields on Personlossy | Mapping required | |
| Lead Assignment | Custom field on Person1:1 | Fully supported | |
| Custom Fields | Custom fields on target objectslossy | Mapping required | |
| Attachments | Not migrated1:1 | Not supported | |
| Owner | Workspace User1: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.
Marketing Optimizer gotchas
Lead lifecycle stages do not map directly to standard CRM lead statuses
Workflow automation logic must be rebuilt in the destination platform
Attachments are not accessible via documented API
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 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.
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.
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.
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.
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.
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.
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
Marketing Optimizer
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Marketing Optimizer and Twenty CRM.
Object compatibility
3 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
Marketing Optimizer: Not publicly documented.
Data volume sensitivity
Marketing Optimizer doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 Marketing Optimizer to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Marketing Optimizer
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.