CRM migration
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
Source
Twenty CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Insightly CRM and Twenty CRM.
Complexity
CModerate
Timeline
3-5 weeks
Overview
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.
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 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
Twenty CRM
Person (Lead-type)
1:1Insightly 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
Twenty CRM
Person
1:1Insightly 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
Twenty CRM
Company
1:1Insightly 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
Twenty CRM
Person.CompanyId relationship field
1:1Insightly'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
Twenty CRM
Opportunity
1:1Insightly 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
Twenty CRM
Opportunity Stage
lossyInsightly 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
Twenty CRM
Task
1:1Insightly 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
Twenty CRM
Note
1:1Insightly 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
Twenty CRM
Task or Custom Object
lossyInsightly 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
Twenty CRM
Custom Object
1:1Insightly 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
Twenty CRM
Tag
1:1Tags 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
Twenty CRM
Not migrated
1:1File 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.
| Insightly CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | Person (Lead-type)1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Organization | Company1:1 | Fully supported | |
| Contact-Organization Link | Person.CompanyId relationship field1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Project | Task or Custom Objectlossy | Fully supported | |
| Custom Object | Custom Object1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Attachment metadata | Not migrated1:1 | Fully supported |
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.
Insightly CRM gotchas
Free plan record cap applies to all Insightly objects
API rate limits vary by plan and reset daily
Custom fields require FIELD_NAME lookup before writes
XML export only captures default fields for migrations out
Link relationships must be rebuilt via dedicated endpoints
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 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.
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.
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.
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.
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
Insightly CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Insightly CRM and Twenty CRM.
Object compatibility
2 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
Insightly CRM: 10 requests per second; daily limit varies by plan (starting at 1,000 requests/day for free plan).
Data volume sensitivity
Insightly CRM 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 Insightly CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Insightly CRM
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.