CRM migration
Field-level mapping, validation, and rollback between Insightly CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Insightly CRM
Source
Freshsales
Destination
Compatibility
7 of 8
objects map 1:1 between Insightly CRM and Freshsales.
Complexity
CModerate
Timeline
2-4 weeks
Overview
Insightly CRM and Freshsales share overlapping object names (Contacts, Organizations, Opportunities) but differ fundamentally in how data is accessed and mapped. Insightly's native export produces XML files containing only default fields, dropping all custom fields, and Freshsales's own built-in Insightly migration tool enforces this static mapping with a 25,000-record hard cap. We bypass both limitations by exporting directly from Insightly's REST API, retrieving custom field metadata via the /CustomFields endpoints, and writing all records to Freshsales via its API with type-matched field creation first. The Insightly explicit linking model (Contacts linked to Organizations via separate link records) requires us to sequence the import as Organizations first, then Contacts, then link reconstruction. We do not migrate Workflows, automations, or reports; these are documented for your admin to rebuild in Freshsales.
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 Freshsales, 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
Freshsales
Lead
1:1Insightly Leads map directly to Freshsales Leads. The Insightly Lead object has its own lifecycle separate from Contacts. We import Leads first since they are top-level records with no parent dependency. Lead status values from Insightly map to Freshsales Lead Status with a custom field insightly_lead_status__c preserving the original value for audit. Email address serves as the dedupe key during import.
Insightly CRM
Organization
Freshsales
Account
1:1Insightly Organizations map to Freshsales Accounts. This is the first record type we import in any migration because Contacts have a required AccountId lookup. We export all Organization records first, create them in Freshsales via the Accounts API, and resolve the Freshsales Account ID before importing any Contact records that reference them.
Insightly CRM
Contact
Freshsales
Contact
1:1Insightly Contacts map to Freshsales Contacts. We import Contacts after Accounts are created so that the AccountId lookup relationship is satisfied at insert time. Standard fields (name, email, phone, address) migrate directly. Custom fields are retrieved via the /CustomFields/Contacts endpoint at migration start, a FIELD_NAME reference table is built, and all Contact custom field writes reference the correct FIELD_NAME. Contact-Organization links (stored as separate link records in Insightly) are reconstructed after both objects are present in Freshsales by setting the Contact's AccountId to the migrated Organization's ID.
Insightly CRM
Opportunity
Freshsales
Deal
1:1Insightly Opportunities map to Freshsales Deals. Pipeline stage names in Insightly are custom strings requiring explicit mapping to Freshsales Deal stages. We create a stage mapping table during scoping, deploy the stage values in Freshsales before migration, and apply the mapping during Deal import. Probability percentages migrate to Freshsales probability fields where supported. Closed-won and closed-lost reasons map to Freshsales deal status notes.
Insightly CRM
Task
Freshsales
Task
1:1Insightly Tasks are standalone records linked to any primary object (Contact, Organization, Opportunity). We import Tasks after their parent records exist in Freshsales and resolve the WhatId (Account or Deal) and WhoId (Contact or Lead) references at migration time. Task status values (Not Started, In Progress, Completed, Deferred) map to Freshsales Task status picklist. Note that Freshsales' native Insightly migration tool only supports default task fields; we use the API path to preserve all standard and custom task fields.
Insightly CRM
Note (Comment)
Freshsales
Note
1:1Insightly Notes (called Comments in Insightly's UI) are standalone objects that can be linked to any primary record. We preserve note body, author, and creation timestamp. The link relationship to the parent record (Contact, Organization, Opportunity) is reconstructed in Freshsales by resolving the WhatId and WhoId references after parent records are present. Note author is stored as a custom field if Freshsales does not have a native author field.
Insightly CRM
Project
Freshsales
Task (or Custom Object)
lossyInsightly Projects do not have a direct Freshsales equivalent. We handle Project migration as a configuration decision made during scoping: either Projects map to Freshsales Tasks with project-level metadata stored in custom fields, or a Freshsales Custom Object named Project is created to hold project records with their associated tasks. The customer chooses the strategy based on how they use Projects in Insightly.
Insightly CRM
Tag
Freshsales
Tag
1:1Insightly Tags are flat string labels applied to Contacts, Organizations, Opportunities, and Projects. We export tag arrays as plain string lists and import them to Freshsales' tag field on the corresponding object. Tag semantics are preserved as-is. If the customer uses tags for segmentation, we note that Freshsales tags serve the same flat-label purpose.
| Insightly CRM | Freshsales | Compatibility | |
|---|---|---|---|
| Lead | Lead1:1 | Fully supported | |
| Organization | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Opportunity | Deal1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note (Comment) | Note1:1 | Fully supported | |
| Project | Task (or Custom Object)lossy | Fully supported | |
| Tag | Tag1: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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Discovery and plan verification
We audit the source Insightly account across plan tier (Free, Plus, Professional, Enterprise), record counts per object (Leads, Contacts, Organizations, Opportunities, Tasks, Notes, Projects), custom field metadata per object via the /CustomFields endpoints, active Workflow Automations count, and any link relationship volume. We verify the account plan tier to confirm whether the 2,500-record free-plan cap applies. The discovery output is a written migration scope, a custom field inventory with FIELD_NAME reference table, and a link relationship count for sequencing planning.
Custom field schema creation in Freshsales
Before any data migration begins, we create all custom fields in Freshsales that exist in Insightly, matched by object and field type. Text fields map to Freshsales text custom fields, date fields to date fields, picklist fields to picklist fields, currency fields to currency fields. This step ensures that when we write Insightly records via the Freshsales API, all custom field values land in correctly typed destination fields. We skip this step when using Freshsales' native XML import, which is why that path loses custom field data.
Export via Insightly REST API
We export all record types directly from Insightly's REST API, bypassing the XML export function entirely. The export includes all standard fields and all custom field values. We pace requests at 10 requests per second to stay within Insightly's per-second rate limit, and we chunk large datasets across multiple days when the daily request quota (tied to plan tier) is constraining. Link relationship records are exported separately after their parent objects.
Import in dependency order with parent resolution
We import records into Freshsales in strict dependency order: Accounts (from Organizations) first, then Leads and Contacts with AccountId resolved to the migrated Account, then Deals with AccountId and ContactId resolved, then Tasks and Notes with WhatId and WhoId resolved to the migrated parent records. Each phase emits a row-count reconciliation report before the next phase begins. We use Freshsales' API write endpoints with rate-limit handling and exponential backoff.
Link relationship reconstruction
After Organizations, Contacts, and Opportunities are present in Freshsales, we reconstruct the Contact-to-Account relationships by updating each Contact record with the resolved Freshsales AccountId. Any Opportunity-to-Contact relationships (if applicable) are also updated at this stage. This step is the critical differentiator from Freshsales' native XML import, which does not handle Insightly's explicit link records.
Cutover, validation, and automation handoff
We freeze Insightly writes during the cutover window, run a delta migration of any records modified during the migration, then mark Freshsales as the system of record. We deliver a Workflow and Report inventory document listing every active automation and report in Insightly with recommended Freshsales equivalents. We support a one-week hypercare window for reconciliation issues. We do not rebuild Insightly Workflows as Freshsales automations inside the migration scope.
Platform deep dives
Insightly CRM
Source
Strengths
Weaknesses
Freshsales
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 Freshsales.
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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Insightly CRM to Freshsales 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 Freshsales
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.