CRM migration
Field-level mapping, validation, and rollback between MetroLeads and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
MetroLeads
Source
Twenty CRM
Destination
Compatibility
7 of 12
objects map 1:1 between MetroLeads and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from MetroLeads to Twenty CRM is a lead-centric to Person-centric remodelling, not a straight record copy. MetroLeads organises data around a Lead record that carries state, source_tags, and lead_fields keyed by internal property IDs, with Companies as parent containers accessed via a /companies/{uuid}/leads endpoint hierarchy. Twenty CRM uses a standard Person and Company model where contact details live on Person, company associations on Company, and engagement history on Task and Event objects. We resolve the property-ID mapping (fetching the MetroLeads property schema first), catalogue every unique tenant-configured state value, and design the Person and Company target schema before any data moves. Native cloud telephony records and MetroLeads-specific Intellisearch scoring do not map to standard Twenty objects; we export them as structured JSON and deliver a written handoff for the customer's admin to rebuild in Twenty's Workflow builder. Workflows and automations do not migrate as code.
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 MetroLeads 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.
MetroLeads
Lead
Twenty CRM
Person
1:1MetroLeads Lead records map to Twenty CRM Person records. The MetroLeads lead_id becomes the Person's id (preserved as external_id for cross-reference). The lead's name, state, source_tags, lead_creation_time, and assigned_to user reference migrate to Person's standard fields. The lead-centric state value (e.g. 'contacted', 'qualified') is mapped to a Twenty custom field metro_state__c because Twenty does not have a native lead-state concept. We resolve the assigned_to user reference to a Twenty User record by email match during import.
MetroLeads
Company
Twenty CRM
Company
1:1MetroLeads Company records map directly to Twenty CRM Company. The Company serves as the parent container for Leads and is accessed via the /companies/{company_uuid}/leads endpoint hierarchy during export. We export Company records first, then associate each migrated Lead (now Person) to its parent Company via the CompanyId lookup. Domain, address, and custom company fields migrate to Twenty's Company standard and custom fields.
MetroLeads
Phones
Twenty CRM
Phone (on Person and Company)
1:1MetroLeads embeds phones as an array within Lead records with type metadata (Work, Mobile, etc.). We flatten these into a standard phone table keyed by record and migrate to Twenty's phone number fields on Person (primary contact phone) and Company (main office phone). Type metadata is preserved in a custom field phone_type__c on Twenty.
MetroLeads
Emails
Twenty CRM
Email (on Person)
1:1MetroLeads embeds emails as an array within Lead records with type metadata (Work, Personal). We extract these into a standard email table and migrate the primary email address to Twenty Person's email field. Additional email addresses migrate to Twenty's emailAddresses relation with type metadata preserved.
MetroLeads
Events
Twenty CRM
Task and Event
1:manyMetroLeads Events track engagement history tied to Leads. The event_type field determines the target: call-type events map to Twenty Task with TaskSubtype=Call; meeting-type events map to Twenty Event; general engagement events map to Task. We preserve event timestamps for activity timeline ordering and link each migrated record to the corresponding Twenty Person and Company via the Activity's relations.
MetroLeads
User
Twenty CRM
User
1:1MetroLeads User records (id, name, role) export and map to Twenty CRM User. We resolve users by email match. Any MetroLeads User without a matching Twenty User is held in a reconciliation queue for the customer's admin to provision before record import resumes. assigned_to references on Lead and Event records are updated to point to the resolved Twenty User IDs.
MetroLeads
Lead Fields (Custom Properties)
Twenty CRM
Custom Fields on Person and Company
lossyMetroLeads lead_fields are keyed by internal property IDs (e.g. customer_id_070) rather than human-readable names. The property name catalog is a separate API call. We fetch the full MetroLeads property schema first, build an ID-to-name mapping, then apply that mapping during field mapping so destination custom fields are named correctly in Twenty. Custom fields are created in Twenty's data model editor before migration using the resolved property names.
MetroLeads
Lead State
Twenty CRM
Custom Picklist Field (metro_state__c)
lossyMetroLeads Lead state accepts tenant-configured string values, meaning 'contacted' in one MetroLeads instance may not exist in another. We extract all unique state values during the export scan, present them to the customer for lifecycle-stage mapping, and create a custom picklist field metro_state__c on the Twenty Person object with the sourced values. Any unmapped state values are flagged before import so no records are orphaned.
MetroLeads
Source Tags
Twenty CRM
Custom Multi-Select Field or Topic
lossyMetroLeads source_tags are string arrays on Lead records indicating lead disposition (e.g. disposition_answered). We export the raw tag strings and map them to a custom multi-select picklist field source_tags__c on the Twenty Person object. The customer chooses between multi-select (inline display on Person record) or a Topic-based tagging strategy during scoping.
MetroLeads
Advanced Data Modules
Twenty CRM
Custom Objects
1:1MetroLeads Advanced Data Modules are tenant-specific data structures extending the base schema with per-organisation field definitions. We export the module schema alongside records, pre-create equivalent Custom Objects in Twenty's data model editor, and map fields by type (text to text, number to number, date to date). Module-to-Lead relationships are preserved as lookups from the custom object to Person.
MetroLeads
Intellisearch
Twenty CRM
Not migrated (written inventory delivered)
1:1MetroLeads Intellisearch is a scoring and saved-search layer built on lead data. The scoring logic and saved searches do not map 1:1 to Twenty CRM standard objects. We export the raw Intellisearch configuration as a structured JSON file and deliver a written inventory describing how to recreate equivalent scoring rules in Twenty's Workflow builder or as a custom field formula. This is a handoff artefact, not a live data migration.
MetroLeads
Lead Group
Twenty CRM
Custom Field or Shared Workspace
lossyMetroLeads lead_group is a UUID reference grouping related leads. This concept does not map to standard Twenty CRM objects. We export the UUID and the grouped-lead membership, then present options: a custom multi-select field on Person (listing all group UUIDs), a tagging approach, or a custom Group object in Twenty. The customer selects the grouping strategy during scoping.
| MetroLeads | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Phones | Phone (on Person and Company)1:1 | Fully supported | |
| Emails | Email (on Person)1:1 | Fully supported | |
| Events | Task and Event1:many | Mapping required | |
| User | User1:1 | Fully supported | |
| Lead Fields (Custom Properties) | Custom Fields on Person and Companylossy | Mapping required | |
| Lead State | Custom Picklist Field (metro_state__c)lossy | Mapping required | |
| Source Tags | Custom Multi-Select Field or Topiclossy | Fully supported | |
| Advanced Data Modules | Custom Objects1:1 | Mapping required | |
| Intellisearch | Not migrated (written inventory delivered)1:1 | Mapping required | |
| Lead Group | Custom Field or Shared Workspacelossy | Mapping required |
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.
MetroLeads gotchas
Merge API field priority can silently overwrite data
Custom lead_fields use property IDs not property names
Tenant-specific state values require pre-migration catalog
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 property schema extraction
We audit the MetroLeads instance across Leads, Companies, Events, Advanced Data Modules, Users, and any configured lead_groups. The critical first action is fetching the full property schema via the MetroLeads API to build the property-ID-to-name mapping table that governs every subsequent custom field in Twenty. We extract all unique tenant-configured state values, all source_tag strings, and the complete Advanced Data Module field definitions. We pair this with a Twenty CRM workspace audit to confirm the target schema and identify any custom objects that need pre-creation. The discovery output is a written migration scope document covering object mapping, custom field naming, and the state-value catalogue for customer sign-off.
State value catalogue and lead-group strategy
We present the customer with the complete list of unique MetroLeads Lead state values extracted during discovery and map each to a Twenty custom picklist value (metro_state__c). The customer approves or corrects the mapping. We simultaneously present options for the lead_group UUID groupings (custom multi-select on Person, Topic tagging, or a custom Group object) and the customer selects the grouping strategy. These decisions are prerequisites for schema creation in Twenty and cannot be deferred past this step.
Twenty CRM schema creation and sandbox validation
We pre-create the destination schema in Twenty CRM. This includes creating custom fields on Person (metro_state__c, source_tags__c, and any custom fields from MetroLeads lead_fields), custom objects for Advanced Data Modules (with field types matched to Twenty's supported types), and any custom Group object if the customer selected that grouping strategy. Schema is created in a Twenty CRM sandbox environment first for validation. We run a test import of a 100-record subset to confirm field mapping, picklist values, and relationship resolution before proceeding to full migration.
Merge-pending pair identification and deduplication
We identify duplicate Lead records during the MetroLeads export scan by matching on email address and phone number. We present the customer with the duplicate pairs and prompt them to confirm which record should survive in each case. We apply the approved deduplication decisions before exporting, so Twenty receives clean, non-duplicate Person records. MetroLeads automatic deduplication on import does not carry forward to Twenty, so explicit deduplication at export time is required.
Production migration in dependency order
We run production migration into the live Twenty CRM instance in record-dependency order: Users (manual provisioning validated against email match), Companies (first, as the parent for Persons), Persons (with CompanyId resolved from the parent Company, metro_state__c set from the state mapping, and source_tags__c populated from source_tags), Advanced Data Modules (with PersonId lookup resolved), Events mapped to Tasks and Events (linked to the resolved Person and Company records), and finally lead_group memberships applied to the chosen grouping strategy. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze MetroLeads writes during cutover, run a final delta migration of any records created or modified during the migration window, then enable Twenty CRM as the system of record. We deliver the Intellisearch scoring inventory document and the Workflow and automation handoff to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild MetroLeads automations as Twenty Workflows inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
MetroLeads
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 MetroLeads 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
MetroLeads: Not publicly documented in the available research data.
Data volume sensitivity
MetroLeads 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 MetroLeads to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your MetroLeads 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 MetroLeads
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.