CRM migration

Migrate from eZnet CRM to Twenty CRM

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

eZnet CRM logo

eZnet CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between eZnet CRM and Twenty CRM.

Complexity

CModerate

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from eZnet CRM to Twenty CRM is an open-source migration for teams seeking more control and transparency than a proprietary SaaS vendor with a thin market footprint provides. eZnet CRM organizes data as Accounts, Contacts, Leads, Opportunities, and Activities with per-tier record limits and no publicly documented API. Twenty CRM uses a modern data model of People, Companies, Opportunities, and Activities with a documented REST and GraphQL API available both on cloud and self-hosted. We handle the migration by running a structured export against eZnet CRM, reconstructing the custom field schema from source metadata, then loading records into Twenty through its API using dependency order: Companies first, then People with AccountId resolved, then Opportunities with the resolved Company and Person references, then Activities. Workflows, marketing automation, and territory configurations do not migrate; we deliver a written rebuild guide for each.

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

eZnet CRM logo

eZnet CRM

What's pushing teams away

  • Very limited public review presence makes it difficult to assess real-world reliability and support quality before committing.
  • Low web traffic and market visibility suggest a small customer base, which raises long-term viability and ecosystem concerns.
  • Feature documentation is sparse, making it hard for teams to evaluate whether specific capabilities (like complex workflow automation) meet their needs.
  • Smaller vendor footprint means fewer third-party integrations and a thinner marketplace compared to established CRM competitors.

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

Each row shows how a eZnet CRM 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.

eZnet CRM

Account

maps to

Twenty CRM

Company

1:1
Fully supported

eZnet CRM Accounts map directly to Twenty CRM Companies. The Account Name becomes Company name, Website maps to Company website, and any Account-level custom fields (industry classification, employee count, annual revenue) map to equivalent Company custom fields. Account-Contact associations are preserved by creating the Company record first in migration order so that Person records can reference it via the companyId field. We use Account name as the dedupe key during import.

eZnet CRM

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

eZnet CRM Contacts map to Twenty CRM Person records. Standard fields (firstName, lastName, email, phone, address) transfer directly. The Contact-Account association resolves to the Company record via companyId. Contact custom fields (department, title, preferred contact method) map to Person custom fields. If the Contact has an associated email integration record from eZnet CRM Professional tier, we preserve that as a note attached to the Person.

eZnet CRM

Lead

maps to

Twenty CRM

Person (or CSV staging)

1:many
Fully supported

eZnet CRM Leads are distinct from Contacts and carry lead status, source, and custom lead fields. Twenty CRM currently uses a unified Person model without a separate Lead object. We map Leads to Person records and flag them with a custom status field (e.g., lead_status__c = 'Lead') to preserve the original lead lifecycle. The customer's admin reviews and converts these Person records to opportunity-ready status post-migration. Lead source and score fields transfer to custom Person fields.

eZnet CRM

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

eZnet CRM Opportunities map directly to Twenty CRM Opportunities. Pipeline stage names, deal amounts, expected close dates, and probability percentages transfer. The Opportunity-Account and Opportunity-Contact associations resolve to CompanyId and PersonId respectively during migration. Stage names map from eZnet pipeline stages to Twenty Opportunity stage values, with a stage mapping table reviewed and approved by the customer before import.

eZnet CRM

Pipeline and Stages

maps to

Twenty CRM

Opportunity stage configuration

lossy
Fully supported

eZnet CRM pipeline and stage configuration (stage names, order, win/loss definitions) is captured from source and mapped to Twenty's Opportunity stage values. We create a stage mapping table as part of the migration scope document. The customer reviews and approves the mapping, then we configure Twenty's opportunity stages to match the business logic of the source pipeline. Probability percentages migrate from eZnet to Twenty stage probability fields.

eZnet CRM

Activity

maps to

Twenty CRM

Note and Task

1:1
Fully supported

eZnet CRM Activities (calls, emails, tasks, events) map to Twenty CRM Notes and Tasks. Activity type distinguishes between note entries (mapped to Note) and action items (mapped to Task with Task status). Activity date, owner, and notes text transfer directly. The Activity-Contact and Activity-Account associations resolve to PersonId and CompanyId via the parent-record lookup we performed during scoping. Meeting-type activities become Event records in Twenty's activity model.

eZnet CRM

Document Library

maps to

Twenty CRM

Attachment (metadata only)

lossy
Fully supported

eZnet CRM Document Library records contain file metadata (name, type, creation date, associated Contact or Account). We export the document metadata and link it to the parent Person or Company record in Twenty. Actual file blobs (PDFs, images, spreadsheets) require separate handling: we flag them as a manual step during scoping, provide the customer with a file list and attachment procedure, and note that the files need to be uploaded to Twenty's attachment system post-migration.

eZnet CRM

Custom Fields

maps to

Twenty CRM

Custom Field

lossy
Mapping required

eZnet CRM custom fields (available on Standard tier and above) include data type, picklist values, and visibility settings. We capture the full custom field schema from the source system during scoping, then reconstruct it in Twenty CRM using Twenty's field creation interface or API. Picklist values map as-is; validation rules do not transfer and must be recreated manually in Twenty. The customer's admin reviews the custom field schema reconstruction before migration begins.

eZnet CRM

User (Owner)

maps to

Twenty CRM

Workspace User

1:1
Fully supported

eZnet CRM Users with role-based assignments map to Twenty CRM workspace Users. Owner associations on Opportunities, Activities, and Contacts transfer by matching on user email. We reconcile owners by email against the Twenty workspace user list; missing users go to a provisioning queue for the customer's admin to create before record import resumes. Inactive users in eZnet CRM are preserved as historical owners in Twenty with inactive status where supported.

eZnet CRM

Marketing Campaign

maps to

Twenty CRM

Campaign (metadata)

1:1
Fully supported

eZnet CRM Marketing Campaign records and associated campaign member associations to Contacts are exported. Campaign member status and engagement data transfer to Twenty as Campaign records linked to Person records. We note that marketing automation logic (email sequences, lead scoring triggers) does not migrate and must be rebuilt. The campaign metadata provides a record of what marketing programs existed for audit and attribution purposes.

eZnet CRM

Inventory Item

maps to

Twenty CRM

Custom Object or linked record

lossy
Fully supported

eZnet CRM Inventory Items (Professional tier and above) include item records, stock levels, and pricing. We export inventory metadata as a custom data set. In Twenty CRM, there is no native inventory object, so inventory data is mapped to a custom object or linked as note-attached data on the relevant Company or Person. The customer's admin determines whether inventory data is relevant for their Twenty use case and how to structure it.

eZnet CRM

Custom Modules

maps to

Twenty CRM

Custom Object

1:1
Fully supported

eZnet CRM Enterprise tier supports Custom Modules and Custom Related Lists. These map to Twenty CRM custom objects. We capture the full module schema including related list definitions, field types, and inter-object relationships, then reconstruct them in Twenty before the main record migration begins. Custom object naming follows Twenty conventions. Lookup relationships to standard objects (Company, Person, Opportunity) are re-established using the IDs resolved during parent-record import.

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.

eZnet CRM logo

eZnet CRM gotchas

High

Per-tier record limits create migration scope boundaries

High

No publicly documented API endpoint reference

Medium

Sparse public review corpus limits migration risk assessment

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

  • No documented eZnet CRM API forces manual export handling

    eZnet CRM does not publish a developer portal or public API reference in available research. This means migration tooling cannot query the source via a standard REST or GraphQL endpoint. We work around this by identifying available export mechanisms (CSV export, data dump, or direct database read if the customer has Private Cloud access) during discovery. If only manual CSV export is available, we handle the file extraction, data cleaning, and batch import through Twenty's API. This adds scoping time and requires the customer to provide complete data exports from their eZnet CRM instance. We cannot begin schema design until the export format is confirmed.

  • Custom field schema must be reconstructed from source data

    eZnet CRM sparse documentation means there is no publicly available field reference listing every standard and custom field with its data type and picklist values. We must infer the custom field schema by inspecting the exported data: column headers in CSV exports reveal field names, and data inspection reveals picklist values and data types. This reconstruction step adds time to the discovery phase and requires the customer to confirm the field schema accuracy before we begin building the Twenty destination schema. Fields with unclear types are flagged in the mapping document for customer review.

  • Twenty CRM self-hosted update process can blank workspace data

    GitHub issue #14705 in the Twenty repository documents a known problem where self-hosted instances updating across major versions (e.g., 1.3.0 to 1.6.7) can result in a blank CRM workspace after the database migration completes. This is a Twenty-specific risk for organizations running self-hosted Twenty after migration. We mitigate this by ensuring the customer follows the documented self-hosted update procedure, backs up their database before each update, and validates workspace data after every update. This risk does not apply to customers using Twenty's cloud offering.

  • Document file blobs do not migrate as part of standard scope

    eZnet CRM's Document Library stores actual file blobs (PDFs, images, documents). We export document metadata and link it to the parent record in Twenty. The actual files must be uploaded separately into Twenty's attachment system. We provide a detailed file inventory and naming convention so the customer can bulk-upload documents post-migration. For customers with large document libraries, this manual step can be time-consuming and is scoped separately.

  • Workflows and automation do not map between these platforms

    eZnet CRM workflows and territory management configurations use a different automation model than Twenty CRM. Twenty does not currently expose workflow automation as a first-class feature at the level of eZnet CRM's workflow builder. We do not migrate workflows as code. We deliver a written inventory of every eZnet CRM workflow and automation with its trigger, conditions, and actions, and the customer's admin rebuilds them in Twenty using Twenty's configuration options or a third-party automation layer. Territory assignments similarly must be rebuilt manually in Twenty's workspace settings.

Migration approach

Six steps for a successful eZnet CRM to Twenty CRM data migration

  1. Discovery and export format assessment

    We audit the source eZnet CRM instance across tier (Standard/Professional/Enterprise/Private Cloud), total record counts per object (Accounts, Contacts, Leads, Opportunities, Activities, Documents, Custom Modules), and custom field inventory. Because eZnet CRM has no documented API, we work with the customer to identify the available export mechanism: CSV export from within eZnet, direct database read for Private Cloud deployments, or a third-party export tool. We document the export format (columns, delimiters, encoding) and use it to infer the full field schema. The discovery output is a written migration scope document with record counts, identified export mechanism, and any data quality flags (missing required fields, duplicate candidates, orphaned relationships).

  2. Schema design and custom field reconstruction

    We design the destination Twenty CRM schema. This includes creating the standard objects (Companies, People, Opportunities) with any required custom fields mapped from the inferred eZnet field schema. We reconstruct picklist values, data types, and visibility settings based on what we observed in the export data. The customer reviews and approves the custom field reconstruction before we begin building the destination schema. We also configure Twenty's Opportunity stages to match the eZnet pipeline stage names and probabilities using the stage mapping table. For self-hosted Twenty, we coordinate with the customer's infrastructure team to confirm API access and database backup procedures.

  3. Sandbox validation and reconciliation

    If the customer is using Twenty Cloud or has a staging self-hosted instance, we run a full migration into the sandbox using production-like data volume. The customer reconciles record counts (Companies in, People in, Opportunities in, Activities in), spot-checks a random sample of records against the eZnet source, and validates that relationships (Person-Company, Opportunity-Company, Opportunity-Person) are intact. Any field mapping corrections happen in the sandbox, not in production. For customers without a staging environment, we perform the first migration as a dry run and review the output with the customer before committing to production.

  4. Owner and user reconciliation

    We extract every distinct eZnet CRM User referenced as an owner on Opportunities, Activities, and Contacts and match by email against the Twenty workspace user list. Any eZnet User without a matching Twenty User goes to a reconciliation queue for the customer's admin to provision. This step cannot be skipped because OwnerId references on Opportunities and Activities must resolve to a valid Twenty user at import time. We also flag any inactive eZnet users for preservation as historical owners.

  5. Production migration in dependency order

    We run production migration in record-dependency order. First, we migrate Companies (from eZnet Accounts), resolving any duplicate Company names against the dedupe key. Second, we migrate People (from eZnet Contacts and Leads), resolving the companyId reference for each Person. Third, we migrate Opportunities with AccountId, PersonId, and OwnerId resolved at migration time. Fourth, we migrate Activities (Notes and Tasks), resolving WhoId and WhatId to the migrated Person and Company IDs. Fifth, we migrate any Custom Modules to Twenty custom objects (last, because they often have lookups to standard objects). Document metadata migrates as attachments linked to the parent record. Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, validation, and rebuild handoff

    We coordinate a cutover window during which no new records are created in eZnet CRM. We run a final delta migration of any records modified during the migration window, then the customer switches their team to Twenty CRM as the system of record. We deliver the workflow and automation inventory document to the customer's admin team for rebuild in Twenty's configuration options or a third-party automation layer. We provide a document upload guide with the file inventory from the eZnet Document Library for bulk upload. We support a one-week hypercare window where we resolve any record relationship or data quality issues reported by the customer's team. Workflow rebuild, automation rebuild, and post-migration admin training are outside standard migration scope and can be scoped as separate engagements.

Platform deep dives

Context on both ends of the pair

eZnet CRM logo

eZnet CRM

Source

Strengths

  • Starting price of $10/user/month is among the lowest entry points for a cloud CRM with integrated marketing and support.
  • All-in-one bundling of sales, marketing, and support reduces the need for multiple subscriptions.
  • Unlimited records on Professional and Enterprise tiers remove per-database storage concerns for growing teams.
  • Customization capabilities including custom fields, modules, and dashboards provide flexibility for non-standard workflows.
  • Private Cloud option with on-site hosting and free installation appeals to organizations with data residency requirements.

Weaknesses

  • Extremely thin public review presence makes independent quality assessment nearly impossible.
  • Monthly web traffic is extremely low, indicating a very small customer base and limited market traction.
  • No dedicated API documentation or developer portal found in public research, raising questions about migration tooling support.
  • Sparse official documentation and FAQ content suggests limited investment in customer-facing resources.
  • No evidence of a mature third-party integration marketplace compared to established CRM platforms.
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?

Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.

C

Overall complexity

Moderate migration

Derived from compatibility, mapping clarity, API constraints, and data volume across eZnet CRM and Twenty CRM.

  • Object compatibility

    C

    4 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

    eZnet CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your eZnet CRM 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 15,000 Accounts and 5,000 Opportunities with no custom modules. Migrations with heavy custom field schemas, large document libraries, inventory data, or significant activity histories move to eight to twelve weeks because of manual export handling, custom field schema reconstruction, and parent-record resolution. The undocumented eZnet CRM API is the primary variable: if CSV export is the only available mechanism, the customer must provide complete exports, which can require multiple export runs and data preparation sessions before we can begin the Twenty-side schema build.

Adjacent paths

Related migrations to explore

Ready when you are

Move from eZnet CRM.
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