CRM migration

Migrate from Net-Results to Twenty CRM

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

Net-Results logo

Net-Results

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

80%

8 of 10

objects map 1:1 between Net-Results and Twenty CRM.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Net-Results to Twenty CRM is a shift from a marketing-automation-first platform with email campaign depth to an open-source CRM with sales-pipeline depth and a modern API-first architecture. Net-Results organizes around Contacts, Campaigns, and Automation Workflows; Twenty CRM uses People, Organizations, and Opportunities with a native Activity timeline. We map Net-Results Contacts to Twenty People, Net-Results Companies to Twenty Organizations, and Net-Results Campaigns to a Campaign tagging model on People and Opportunities. Net-Results suppression lists (hard bounces, unsubscribes) migrate as a post-load cleanup pass against Twenty's People records to avoid false opt-out flags. Automation Workflows cannot export from Net-Results; we inventory every workflow with its step count and contact enrollment, then deliver a written handoff for the customer's admin to rebuild in Twenty. The Net-Results JSON API with hundreds of CRUD methods covers all core objects, which we target via Twenty's REST API with batch chunking and rate-limit handling.

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

Net-Results logo

Net-Results

What's pushing teams away

  • Marketing automation workflow logic is not easily portable, making it difficult to migrate complex campaigns when switching platforms.
  • Limited depth in CRM features compared to full-suite platforms means teams requiring advanced sales pipeline management often outgrow the product.
  • Template HTML structures may not transfer cleanly to other platforms, requiring rebuilds when migrating email assets.

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

Each row shows how a Net-Results 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.

Net-Results

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Net-Results Contact records map to Twenty Person records. Standard fields (first name, last name, email, phone, address) migrate directly. Lifecycle stage metadata from Net-Results becomes a custom text field person_lifecycle_stage__c on the Person record. We deduplicate on email address against any existing Twenty Persons at migration time. If the Net-Results Contact has a related Company, we resolve the Organization lookup before Contact insert.

Net-Results

Company

maps to

Twenty CRM

Organization

1:1
Fully supported

Net-Results Company records map to Twenty Organization records. The company_name and domain fields become Organization name and website. Any custom company properties require explicit field mapping against Twenty's Organization schema during discovery. Organization records are created before the Contact import so that the Person-Organization lookup is satisfied at the moment of Person insert.

Net-Results

Campaign

maps to

Twenty CRM

Tag + Opportunity or Person note

1:many
Fully supported

Net-Results Campaigns do not have a direct equivalent in Twenty CRM. We map campaign name and status to a Tag on Person records and optionally to an Opportunity with campaign-type naming. Campaign dates and type metadata migrate as Opportunity custom fields or as a note on the primary Person if no deal is associated. The customer chooses the campaign strategy during scoping.

Net-Results

Email Send

maps to

Twenty CRM

Task or Activity log

1:1
Fully supported

Individual Net-Results send events (opens, clicks, bounces) are activity-level records. We preserve send timestamps, open/click rates, and bounce codes as Task records in Twenty linked to the Person. Twenty does not have a native send-event object, so email send history lands as a structured Task with custom fields capturing the campaign name, send date, open count, click count, and bounce status. Activity timeline ordering is preserved by setting the Task due date to the original Net-Results send timestamp.

Net-Results

Email Template

maps to

Twenty CRM

External HTML asset (manual rebuild)

1:1
Fully supported

Net-Results templates use a drag-and-drop HTML structure that does not render identically in other platforms. We export template HTML and image asset references as a static asset package. Because Twenty CRM has no native email template builder, the customer imports the HTML into their preferred email platform (Mailchimp, SendGrid, or similar) and links the resulting campaign back to Twenty Persons via Tag or Opportunity. We flag all templates for manual review and advise a send preview before launching imported assets.

Net-Results

Automation Workflow

maps to

Twenty CRM

Not migrated (rebuild handoff document)

1:1
Fully supported

Net-Results workflow logic does not export as a portable artifact. We capture the workflow name, associated contact count, and step-count metadata for every active workflow during discovery. We deliver a written Workflow Inventory document listing each Net-Results workflow with its trigger type, conditions, actions, and a recommended manual rebuild approach in Twenty using Tasks and Opportunity follow-ups. The customer's admin rebuilds workflows post-migration; this is outside standard migration scope.

Net-Results

Suppression List

maps to

Twenty CRM

Person opt-out fields (post-load)

1:1
Fully supported

Net-Results suppression records (hard bounces, unsubscribes, manual suppressions) export as a list of email addresses. We apply this as a post-load cleanup pass against Twenty Persons, setting the opt-out flag and writing a suppression timestamp to a custom field suppression_date__c. If Twenty already has existing Person records with opt-out status, we deduplicate against them to avoid false opt-out flags on valid active contacts. The suppression pass runs after the primary Person import to ensure all records are present.

Net-Results

Custom Field (Contact)

maps to

Twenty CRM

Custom Person field

1:1
Fully supported

Net-Results contact custom fields require explicit field-by-field mapping against Twenty's Person schema during discovery. Text fields map to text, date fields to date, pick lists to select, numeric fields to number. Lookup fields pointing to other Net-Results objects require a relationship strategy decision during scoping before schema creation in Twenty. We pre-create all custom fields in Twenty via the API before any data import to avoid type-mismatch rejections.

Net-Results

Custom Field (Company)

maps to

Twenty CRM

Custom Organization field

1:1
Fully supported

Net-Results company custom fields map to Twenty Organization custom fields using the same type-mapping logic as contact custom fields. Any pick-list values in Net-Results must be pre-created as valid select options in Twenty before import to avoid field validation errors.

Net-Results

Custom Object

maps to

Twenty CRM

Organization or custom table

1:many
Fully supported

Net-Results custom objects (defined with standard fields like Created By, Created Date, Id, and custom fields of type Date, DateTime, Lookup, Number, Pick List, Text, Website) require a scoping decision: whether the custom object maps to a Twenty Organization, to an Opportunity with custom fields, or to a separate custom table via Twenty's REST API. We inventory all custom objects during discovery, map their relationships to Net-Results Contacts and Companies, and pre-create the target schema before import. Lookup fields referencing Net-Results Contacts resolve to the corresponding Twenty Person ID at migration time.

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.

Net-Results logo

Net-Results gotchas

High

Workflow automation logic cannot be exported

Medium

Email template HTML may not render identically in destination systems

Medium

Suppression lists must be explicitly merged at the destination

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

  • Automation Workflow logic does not migrate to Twenty

    Net-Results Automation Workflows are not exportable as a portable artifact. The trigger-and-action definitions live in Net-Results' rendering engine and cannot be extracted as configuration code. We capture workflow name, enrolled contact count, and step-count metadata during discovery and deliver a written Workflow Inventory for the customer's admin to rebuild manually in Twenty. Any sales engagement sequences or nurture cadences built inside Net-Results require a separate rebuild effort post-migration.

  • Email template HTML requires manual reformatting

    Net-Results email templates use a drag-and-drop rendering engine that produces platform-specific HTML. When exported, the HTML layout often breaks or reflows when opened in a different email client or platform. We export all template HTML and image asset references as a structured package, flag each template for manual review, and advise the customer to run a send preview before launching campaigns from imported assets. Twenty CRM has no native email template builder, so the customer selects an external email platform for campaign sends post-migration.

  • Suppression lists require a post-load deduplication pass

    Net-Results suppresses contacts at the platform level (hard bounces, unsubscribes). When migrating to Twenty CRM, we export the full suppression list and apply it as a post-load cleanup pass after the primary Person import completes. If Twenty already contains existing Person records with existing opt-out flags, we deduplicate against them to avoid accidentally re-activating contacts that had previously unsubscribed in the destination. We also flag any Person records where Net-Results suppression status conflicts with an active send permission in Twenty.

  • Net-Results custom objects need pre-migration schema design

    Net-Results custom objects can have Lookup fields referencing other Net-Results objects (Contacts or Companies) and field types including Date, DateTime, Number, Pick List, Text, and Website. Before importing into Twenty CRM, we must design the target schema—whether the custom object becomes a Twenty Organization, an Opportunity with custom fields, or a custom table via the API. Lookup field resolution requires that the referenced Net-Results Contact or Company already exists in Twenty with a known ID before the custom object import can proceed.

  • Twenty CRM self-hosted instances require version verification

    A reported GitHub issue (twentyhq/twenty#12936) documents a database migration failure in Twenty v1.0 when deploying via Docker or Kubernetes on a fresh database. The issue involves a missing core.keyValuePair table at startup. We verify the target Twenty instance version before migration and confirm that the database schema is fully initialized. For self-hosted deployments, we recommend running the latest stable release or confirming the patch status before scheduling the migration cutover.

Migration approach

Six steps for a successful Net-Results to Twenty CRM data migration

  1. Discovery and schema inventory

    We audit Net-Results across all supported object types: Contacts, Companies, Campaigns, Email Sends, Email Templates, Automation Workflows, Suppression Lists, and any Custom Objects. We capture record counts, field inventories, and data freshness timestamps for each object. We inventory every active Net-Results workflow with its step count and enrolled-contact volume for the Workflow Inventory handoff. We check the Net-Results JSON API availability and any documented rate limits before scheduling export. The discovery output is a written migration scope with a Net-Results object inventory and a Twenty CRM schema plan.

  2. Twenty CRM schema preparation

    We pre-create the target schema in Twenty CRM before any data import. This includes standard Person fields, Organization fields, and Opportunity fields for deal tracking. We create any custom fields on Person, Organization, and Opportunity to match the Net-Results custom field inventory, with types mapped (text to text, date to date, pick list to select, number to number). If the customer uses Net-Results custom objects, we create the corresponding Organizations, Opportunities, or custom tables and configure any required lookups. Twenty's REST API is used for all schema creation. We validate the schema in a staging Twenty instance before production.

  3. Export, deduplication, and suppression extraction

    We export Net-Results Contacts with all standard and custom fields. We run a deduplication pass using email address as the match key against any pre-existing Twenty Persons to avoid creating duplicate records. We extract the full suppression list (hard bounces, unsubscribes, manual suppressions) as a standalone email-address list for the post-load cleanup pass. For Companies, we export all records with their custom fields in preparation for the Organization import. We confirm that all required Net-Results fields are populated and flag any null required fields before proceeding.

  4. Staging migration and validation

    We run a full migration into a staging Twenty CRM instance using production-like data volume. The customer validates record counts (Persons in, Organizations in, Opportunities in, Tasks in), spot-checks 25-50 random records against the Net-Results source, and reviews the suppression application results. We confirm that Organization-Person lookups resolved correctly and that any custom object relationships are intact. Any mapping corrections or data quality issues are resolved in this phase before production cutover.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Organizations (from Net-Results Companies) first, then Persons (from Net-Results Contacts) with OrganizationId resolved, then Opportunities linked to Organizations and Persons. Email send history migrates as Task records after Persons are confirmed. Each phase emits a row-count reconciliation report before the next phase begins. We use Twenty's REST API with batch chunking (200 records per batch), rate-limit handling, and exponential backoff on 429 responses. After the primary import completes, we run the suppression list post-load pass to set opt-out flags on suppressed Person records.

  6. Workflow inventory handoff and post-migration support

    We deliver the Workflow Inventory document listing each Net-Results Automation Workflow with its name, step count, enrolled contact count, trigger type, conditions, and actions, plus a recommended rebuild approach in Twenty's task and opportunity follow-up model. We deliver the Email Template Export package with HTML files and asset references and a template review checklist. We offer a one-week hypercare window to resolve any reconciliation issues raised by the customer's team. We do not rebuild Net-Results Workflows in Twenty as part of standard migration scope; that work is handled by the customer's admin team using the Workflow Inventory as their blueprint.

Platform deep dives

Context on both ends of the pair

Net-Results logo

Net-Results

Source

Strengths

  • Drag-and-drop email builder with dozens of responsive templates
  • Granular sync control specifying direction, timing, and source-of-truth
  • JSON API with hundreds of CRUD methods across objects
  • Strong deliverability and activity tracking (opens, clicks, bounces)
  • Responsive customer support consistently praised in reviews

Weaknesses

  • Workflow automation logic is not exportable and must be manually recreated at the destination
  • Complex CRM features like advanced pipeline management are limited compared to enterprise CRMs
  • Email template HTML may require reformatting when migrating to non-Net-Results platforms
  • Limited public documentation on API rate limits and bulk export capabilities
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 Net-Results 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

    Net-Results: Not publicly documented — no published numeric rate limits on the marketing site. Confirm via vendor support before high-volume operations..

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Net-Results to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Small migrations under 10,000 Contacts and 5,000 Companies with no custom objects typically complete in four to eight weeks. Migrations with custom objects, large engagement histories (over 200,000 send-event records), complex suppression-list merges, or multiple Net-Results custom object schemas extend to eight to fourteen weeks because of API chunking, deduplication logic, and the custom field mapping inventory work required during discovery.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Net-Results.
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