CRM migration

Migrate from Insightly CRM to Twenty CRM

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

Insightly CRM logo

Insightly CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

83%

10 of 12

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

Complexity

CModerate

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Insightly CRM to Twenty CRM is a migration from a tiered per-user SaaS product to an open-source, self-hosted CRM with full data ownership. Insightly structures its data model around four core record types (Leads, Contacts, Organizations, Opportunities) connected by an explicit link API rather than automatic parent-child hierarchy. Twenty CRM uses a simpler schema centered on Person, Company, and Opportunity records with native relationship fields. The primary structural difference is that Insightly link records have no direct Twenty equivalent, so we resolve Contact-to-Organization associations through Twenty's relationship fields or a custom field during migration. Workflow automations, Project tasks, and the marketing automation layer do not migrate; we deliver a written inventory of active automations and Project structures for the customer's admin to rebuild in Twenty's workflow engine.

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

Insightly CRM logo

Insightly CRM

What's pushing teams away

  • Workflow automation and AI Copilot are locked behind the Professional tier, pushing teams with automation needs to higher-cost plans quickly as headcount grows.
  • Custom field handling requires referencing FIELD_NAME in API calls, and the UI documentation is described as incomplete and overwhelming by power users.
  • Setup is time-consuming, particularly for automation configuration, with users reporting frequent timeouts during the process.
  • Limited customization compared to enterprise CRMs — some users find field-level tailoring insufficient for complex sales processes.

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

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

Insightly CRM

Lead

maps to

Twenty CRM

Person (Lead-type)

1:1
Fully supported

Insightly Leads are top-level records with their own lifecycle separate from Contacts. We map them 1:1 to Twenty Persons flagged as leads based on the source record type. The original Insightly Lead status and source fields migrate to corresponding Twenty Person fields. If Twenty's Person schema uses a role or type property to distinguish leads from contacts, we apply that field during import to preserve the lifecycle distinction.

Insightly CRM

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Insightly Contacts map to Twenty Persons with all standard fields (name, email, phone, address) and custom fields preserved. The Insightly FIELD_NAME for each custom field is retrieved via the /CustomFields/Contacts endpoint before writing. The challenge specific to this pair is that Insightly Contacts must be explicitly linked to Organizations via link records, not by embedding the Organization reference in the Contact record. We handle this by importing Organizations first, then Contacts, then reconstructing the link by setting the Contact's Organization relationship field in Twenty to the migrated Organization's ID.

Insightly CRM

Organization

maps to

Twenty CRM

Company

1:1
Fully supported

Insightly Organizations (company-level records) map directly to Twenty Companies. All standard fields (name, domain, address, phone) and custom fields migrate. We import Organizations first in the dependency order so that Contact imports can reference valid Company IDs. Deduplication uses the Organization name and domain as the matching key.

Insightly CRM

Contact-Organization Link

maps to

Twenty CRM

Person.CompanyId relationship field

1:1
Fully supported

Insightly's link records are the pair-specific complexity in this migration. Insightly does not store the Organization ID directly in the Contact object; instead it uses a separate link record with its own link_id. We export all link records for Contact-to-Organization relationships during discovery, then after both Organizations and Contacts are migrated, we update each Contact in Twenty by setting the relationship field to the migrated Organization's ID. We sequence this as Organizations → Contacts → Link resolution. Without this step, migrated Contacts have no associated Company and appear as orphaned records in Twenty.

Insightly CRM

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Insightly Opportunities map to Twenty Opportunities with pipeline stage, probability, monetary value, and expected close date. Pipeline stage names in Insightly are custom strings, not enumerated values, so we apply an explicit stage name mapping table during migration to match Twenty's pipeline stage definitions. Probability values migrate as integers. Closed-Won and Closed-Lost reasons migrate as custom fields if Twenty supports them.

Insightly CRM

Pipeline Stage

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

Insightly pipeline stages are custom-named strings associated with each Opportunity's pipeline. We extract all unique stage names from the source account during discovery, then create corresponding stage definitions in Twenty's pipeline configuration before importing any Opportunity records. Probability percentages from Insightly stage settings map to Twenty stage weights.

Insightly CRM

Task

maps to

Twenty CRM

Task

1:1
Fully supported

Insightly Tasks are linked to any primary object (Contact, Organization, Opportunity) via the link API. We export tasks with their linked object type and ID, then import tasks into Twenty and link them to the migrated record using the target record's new ID. Task status values (not started, in progress, completed, deferred) map to Twenty's task status enumeration.

Insightly CRM

Note

maps to

Twenty CRM

Note

1:1
Fully supported

Insightly Notes are standalone objects that can be linked to any primary record. We export note body, author, creation timestamp, and the link records specifying which object each note is attached to. Notes migrate as Twenty Notes linked to the migrated parent record. If Twenty does not support rich-text note bodies, we fall back to plain-text migration.

Insightly CRM

Project

maps to

Twenty CRM

Task or Custom Object

lossy
Fully supported

Insightly Projects have no direct Twenty CRM equivalent since Twenty does not include project management as a native module. We treat Projects as a configuration decision: the customer's admin chooses to map them to Twenty Tasks (for lightweight project tracking) or to a custom object matching Insightly's Project schema. We export the full Project structure including tasks, custom fields, and linked Opportunities, and deliver a written mapping recommendation for the admin to implement based on their post-migration workflow preference.

Insightly CRM

Custom Object

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Insightly Custom Objects (available from Plus tier at $29/user) migrate to Twenty custom objects with equivalent field schemas. We pre-create the destination schema in Twenty, including all custom field definitions, before importing any custom object records. Field types (text, date, picklist, currency, checkbox) map to their closest Twenty equivalents. Lookup relationships between custom objects require parent-record import ordering.

Insightly CRM

Tag

maps to

Twenty CRM

Tag

1:1
Fully supported

Tags in Insightly are flat string labels applied to Contacts, Organizations, Opportunities, and Projects. They migrate as string arrays to Twenty's tag field. Tag semantics are preserved as-is. If Twenty uses a separate tagging system rather than a flat string list, we apply the customer's preferred target format during scoping.

Insightly CRM

Attachment metadata

maps to

Twenty CRM

Not migrated

1:1
Fully supported

File attachments in Insightly are stored as URL references or blob references. We do not migrate attachment binary data. We export attachment metadata (filename, URL, associated record type and ID) as a written inventory for the customer's admin to review and re-attach manually post-migration if the files are accessible via the original URL or document store.

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.

Insightly CRM logo

Insightly CRM gotchas

High

Free plan record cap applies to all Insightly objects

High

API rate limits vary by plan and reset daily

Medium

Custom fields require FIELD_NAME lookup before writes

Medium

XML export only captures default fields for migrations out

Medium

Link relationships must be rebuilt via dedicated endpoints

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

  • Insightly link records have no direct Twenty CRM equivalent

    Insightly uses explicit link records to associate Contacts with Organizations, Notes with Opportunities, and other cross-object relationships. These links are not embedded in the primary record objects. Twenty CRM does not have a link table construct. Contact-to-Organization associations in Twenty are handled through a native relationship field on the Person object pointing to a Company. We resolve this by exporting all Insightly link records during discovery, importing Organizations and Contacts in dependency order, then updating each migrated Contact in Twenty to set the relationship field to the migrated Organization's ID. If any link records reference Organizations that failed to migrate, those Contacts will remain unlinked and require manual review.

  • FIELD_NAME lookup required before writing any custom field

    Insightly does not expose custom field IDs in record objects. To write a value to a Contact's custom field, the FIELD_NAME identifier must be retrieved via GET /CustomFields/Contacts first. Without this step, custom field writes silently fail and the field data is dropped. We retrieve the complete custom field metadata per object type at the start of every migration, build a FIELD_NAME-to-field-label reference table, and use it consistently across all record writes. The source_citation for this gotcha is Insightly's own API documentation and the Freshsales migration guide which confirms that 'custom fields are not recognizable in Insightly XML files.'

  • Insightly XML export omits all custom field data

    Insightly's native export-to-ZIP function produces XML files containing only default (standard) fields. Custom fields are not included in these exports. Since Insightly allows only one full data extraction (subsequent exports reflect only new or modified records since the prior export), using the XML export path means custom field data is permanently lost. We bypass the XML export entirely and pull all records including all custom fields directly from the Insightly REST API. This is confirmed by the Freshsales migration documentation which states: 'The mapping used to import your data is a static mapping. Only default fields can be mapped from Insightly as the custom fields are not recognizable in Insightly XML files.'

Migration approach

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

  1. Discovery and API scoping

    We audit the source Insightly account via the REST API: record counts across Leads, Contacts, Organizations, Opportunities, Projects, Tasks, Notes, and any Custom Objects. We pull custom field metadata via GET /CustomFields/{objectName} for each object type to build the FIELD_NAME reference table. We export all link records separately (Contact-to-Organization links, Note attachments, Opportunity links) and store them as a lookup table keyed on the source record ID. We identify the Insightly plan tier to confirm API rate limits and any record count caps. The discovery output is a written scope document covering record counts, custom field inventory, link relationship graph size, and any known data quality issues.

  2. Schema design in Twenty CRM

    We define the destination schema in Twenty CRM based on the discovery output. This includes creating any custom fields not present in the default Twenty schema, configuring pipeline stages to match Insightly's stage names and probability values, and defining the Contact-to-Company relationship field mapping. If the customer chooses to map Insightly Projects to a custom object rather than Tasks, we create that custom object schema here. We validate the schema via the Twenty API before any data import begins. Workflow automations in Insightly are documented as a written inventory and excluded from the schema scope.

  3. Link relationship mapping and test migration

    We process the exported Insightly link records and build a mapping table that associates each source Contact ID with its source Organization ID, then maps those to the migrated target IDs. We run a test migration with a 10% sample of records into Twenty to verify that Organization imports precede Contact imports, that link resolution updates fire correctly after parent record creation, and that tag strings, custom field values, and pipeline stage names render as expected. The customer reviews the test output and validates a sample of records against the source before production migration begins.

  4. Production migration in dependency order

    We run production migration in strict dependency sequence: Companies (from Organizations) first, then Persons (Contacts and Leads) with the Contact-to-Company relationship field resolved immediately after each Person record, then Opportunities with stage name mapping applied, then Tasks and Notes with their parent-record references resolved. Custom Objects import last because they often contain lookup fields to standard objects. Each phase emits a row-count reconciliation report. Link resolution for Contact-to-Organization runs as a post-Contact batch update using the mapping table built in step 3.

  5. Cutover and validation

    We freeze new writes in Insightly during the cutover window, run a delta migration of any records modified during the migration process, then switch the team to Twenty CRM as the system of record. We validate record counts across all object types, spot-check 25-50 randomly selected records for field accuracy, and confirm that Contact-to-Company links are intact. We deliver the written workflow and automation inventory to the customer's admin. We support a one-week post-launch window for reconciliation issues raised by the team.

Platform deep dives

Context on both ends of the pair

Insightly CRM logo

Insightly CRM

Source

Strengths

  • CRM, marketing automation, and project management unified in one subscription, reducing tool sprawl for SMBs.
  • Free plan for 2 users and a 2,500-record cap provides a low-risk evaluation environment.
  • AppConnect delivers 500+ no-code integrations with mainstream business tools without requiring developer resources.
  • Modern UI with faster onboarding compared to legacy CRM alternatives, backed by positive ease-of-setup scores on G2.
  • Project creation directly from closed Opportunities keeps post-sale work connected to the originating deal.

Weaknesses

  • Workflow automation and AI Copilot require the Professional tier, making the Plus plan unsuitable for teams with automation needs.
  • Custom field handling requires FIELD_NAME API lookups, which adds complexity to integrations and migrations.
  • Setup time and reported timeouts during automation configuration create friction for new administrators.
  • Documentation is described as incomplete and overwhelming by power users, according to G2 review themes.
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. 2 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 Insightly CRM and Twenty CRM.

  • Object compatibility

    B

    2 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

    C

    Insightly CRM: 10 requests per second; daily limit varies by plan (starting at 1,000 requests/day for free plan).

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Straightforward migrations under 10,000 total records with no custom objects and clean link relationship graphs typically complete in three to five weeks. Migrations above 15,000 records, with multiple custom objects, large Project-to-Task conversion scope, or complex link relationship graphs, move to six to eight weeks. The primary variables are data volume, custom field count and type complexity, the number of link relationship records requiring resolution, and confirmation time for pipeline stage mapping decisions.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Insightly 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