CRM migration

Migrate from MetroLeads to Twenty CRM

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

MetroLeads logo

MetroLeads

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between MetroLeads and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

MetroLeads logo

MetroLeads

What's pushing teams away

  • Reporting and analytics features lack customization depth, with limited dashboard options for drag-and-drop insight building and graphical trend visualization.
  • Integration ecosystem is narrower than enterprise CRMs, making it difficult to connect specialized tools as the business scales beyond the built-in connectors.
  • Small review sample size on public platforms makes independent quality assessment difficult before committing to a contract.

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

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

maps to

Twenty CRM

Person

1:1
Fully supported

MetroLeads 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

maps to

Twenty CRM

Company

1:1
Fully supported

MetroLeads 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

maps to

Twenty CRM

Phone (on Person and Company)

1:1
Fully supported

MetroLeads 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

maps to

Twenty CRM

Email (on Person)

1:1
Fully supported

MetroLeads 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

maps to

Twenty CRM

Task and Event

1:many
Mapping required

MetroLeads 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

maps to

Twenty CRM

User

1:1
Fully supported

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

maps to

Twenty CRM

Custom Fields on Person and Company

lossy
Mapping required

MetroLeads 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

maps to

Twenty CRM

Custom Picklist Field (metro_state__c)

lossy
Mapping required

MetroLeads 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

maps to

Twenty CRM

Custom Multi-Select Field or Topic

lossy
Fully supported

MetroLeads 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

maps to

Twenty CRM

Custom Objects

1:1
Mapping required

MetroLeads 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

maps to

Twenty CRM

Not migrated (written inventory delivered)

1:1
Mapping required

MetroLeads 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

maps to

Twenty CRM

Custom Field or Shared Workspace

lossy
Mapping required

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

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.

MetroLeads logo

MetroLeads gotchas

High

Merge API field priority can silently overwrite data

Medium

Custom lead_fields use property IDs not property names

Medium

Tenant-specific state values require pre-migration catalog

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

  • MetroLeads custom lead_fields use property IDs not names

    Custom property values in MetroLeads 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. If we skip this step and map directly by ID, the destination custom fields end up with meaningless technical names. We fetch the full MetroLeads property schema first, build an ID-to-name mapping table, and apply that mapping during field definition so destination custom fields in Twenty use the correct human-readable names. This adds one to two days to the discovery phase but prevents a post-migration cleanup of incorrectly named custom fields.

  • MetroLeads merge API silently overwrites secondary lead fields

    MetroLeads merge API prioritises primary lead fields by default when two leads conflict. Passing the wrong primary lead or omitting retain_fields means secondary lead values are silently dropped. We identify merge-pending pairs during the export phase and prompt the customer to confirm which record should survive before executing the import. This preserves merge decisions explicitly rather than accepting the API default. Without this step, duplicate records can reach Twenty CRM with incomplete data and no clear survivor.

  • Tenant-specific Lead state values have no canonical mapping

    The MetroLeads Lead state field accepts tenant-configured string values, meaning 'contacted' in one MetroLeads instance may not exist in another. Twenty CRM has no native lead-state field; state must become a custom picklist. We extract all unique state values during the export scan, present them to the customer for mapping to Twenty custom picklist values, and flag any unmapped values before import so no records arrive in Twenty with an unresolvable state. Skipping this step results in orphaned records with state values that Twenty rejects or strips.

  • Native cloud telephony call history does not map to Twenty CRM

    MetroLeads native cloud VOIP integrates call logging and recording directly into the Lead record. Twenty CRM has no native telephony layer and does not have a standard object for call disposition, duration, or recording URL. We export MetroLeads call metadata (duration, timestamp, disposition, recording URL) as a structured JSON artefact and document the recommended path: third-party VOIP (such as self-hosted Asterisk or a SaaS provider) with call data pushed to Twenty via its REST or GraphQL API post-migration. The customer must select and configure a VOIP replacement independently of the migration.

  • MetroLeads Intellisearch scoring logic has no direct Twenty equivalent

    MetroLeads Intellisearch is a lead scoring and saved-search layer specific to that platform. Its scoring rules and saved search configurations do not map 1:1 to any Twenty CRM standard object. We export the raw Intellisearch configuration as a structured JSON file, but we do not migrate it as live data. We deliver a written inventory describing the scoring logic and recommended rebuild path using Twenty's Workflow builder or a custom formula field. The customer's admin rebuilds scoring in Twenty after cutover. This is a manual rebuild step, not an automated migration.

Migration approach

Six steps for a successful MetroLeads to Twenty CRM data migration

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

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

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

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

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

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

Context on both ends of the pair

MetroLeads logo

MetroLeads

Source

Strengths

  • Unified CRM, telephony, and lead capture in a single platform reduces vendor fragmentation.
  • Automatic lead deduplication prevents duplicate records on import.
  • Native cloud VOIP with call logging integrated directly into the Lead record.
  • Workflow automation for reminders and follow-up sequences is built in.
  • Omni-channel engagement tracking across voice, email, and web.

Weaknesses

  • Limited review corpus on public platforms makes independent quality assessment challenging.
  • Analytics and reporting lack advanced visualization and customization options.
  • Smaller integration ecosystem compared to enterprise-grade CRMs.
  • No publicly documented pricing tiers on the main website.
  • Limited evidence of advanced customization options for enterprise-scale deployments.
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 MetroLeads 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

    MetroLeads: Not publicly documented in the available research data.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Migrations under 10,000 Leads and 2,000 Companies with no Advanced Data Modules land in three to five weeks. Migrations with multiple Advanced Data Modules, large event histories (over 200,000 engagement records), extensive custom lead_fields requiring property-ID-to-name mapping, or MetroLeads instances with non-standard state values move to eight to twelve weeks because of schema discovery, state catalogue design, deduplication scoping, and Advanced Data Module field type matching in Twenty's data model editor.

Adjacent paths

Related migrations to explore

Ready when you are

Move from MetroLeads.
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