CRM migration

Migrate from Insightly CRM to Odoo CRM

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

Insightly CRM logo

Insightly CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

79%

11 of 14

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

Complexity

CModerate

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Insightly CRM and Odoo CRM have fundamentally different relationship models that make this migration structural rather than a simple record copy. Insightly uses explicit link records to associate Contacts with Organizations via dedicated endpoints; Odoo uses a partner-based model where company records (res.partner in company mode) are linked to contact records via a partner_id field. We sequence the migration as Organizations first, then Contacts, then link relationships reconstructed through the partner_id reference, which avoids orphaned Contact records in Odoo. Insightly's XML export bypasses custom fields entirely, so we extract all data including custom field values via Insightly's REST API using a FIELD_NAME lookup table we build at the start of every engagement. We do not migrate Insightly Workflow Automations as Odoo Actions because the trigger models differ; we deliver a written inventory of every automation with a recommended Odoo Actions and Automations equivalent for the customer's admin to rebuild post-migration.

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

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Insightly CRM objects map to Odoo CRM

Each row shows how a Insightly CRM object lands in Odoo 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

Organization

maps to

Odoo CRM

res.partner (company mode)

1:1
Fully supported

Insightly Organizations map to Odoo res.partner records in company mode. We import Organizations first so that the partner ID is available as a parent reference when importing Contacts. Odoo requires the company partner to exist before child contact records can be linked. The ORGANIZATION_NAME field in Insightly becomes the partner's display name; address fields map to street, street2, city, state_id, zip, country_id.

Insightly CRM

Contact

maps to

Odoo CRM

res.partner (contact mode)

1:1
Fully supported

Insightly Contacts map to Odoo res.partner records in contact mode. We import Contacts after Organizations, then reconstruct the Contact-to-Organization link by setting the partner_id field on each contact record to reference the parent Organization's res.partner ID. This replaces Insightly's explicit link records. Email, phone, title, and custom fields migrate as standard partner fields or custom columns on res.partner.

Insightly CRM

Lead

maps to

Odoo CRM

crm.lead

lossy
Fully supported

Insightly Leads do not have a direct Odoo equivalent because Odoo's default CRM module does not include a separate Leads object. Leads are modeled as crm.lead records in the pipeline. We create a dedicated Kanban stage (or stages) in Odoo to receive Insightly Leads that have not been converted, preserving the Lead status in a custom stage name. We flag this as a configuration decision during scoping: the customer chooses whether converted Leads map directly to Opportunities or flow through a separate lead-stage pipeline.

Insightly CRM

Opportunity

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Insightly Opportunities map to Odoo crm.lead records in the pipeline. The Opportunity name becomes the lead name, the monetary value maps to expected_revenue, and the stage maps to a Kanban stage column. We configure the Odoo pipeline stages in Odoo Studio before migration using the exact stage names from Insightly's pipeline configuration, then map probability values to stage probability fields.

Insightly CRM

Pipeline Stage

maps to

Odoo CRM

Kanban Stage

lossy
Fully supported

Insightly pipeline stages are custom-named strings. We create corresponding Kanban stage columns in Odoo CRM Pipeline configuration (accessible via Settings > CRM > Stages). Each stage gets a sequence number and probability percentage matching the Insightly probability values. Stage mapping is applied during Opportunity import so that every crm.lead lands in the correct pipeline column.

Insightly CRM

Task

maps to

Odoo CRM

project.task

1:1
Fully supported

Insightly Tasks map to Odoo project.task records. Tasks are imported after Opportunities to allow WhatId resolution (linking tasks to the originating Opportunity via the project_id or crm_lead_id field). Task status values (Not Started, In Progress, Completed, Deferred, Waiting) map to Odoo task stage columns that we configure in the project settings. The task priority and due date migrate as standard fields.

Insightly CRM

Note (Comment)

maps to

Odoo CRM

mail.message

1:1
Fully supported

Insightly Notes migrate to Odoo mail.message records attached to the parent record (res.partner for Contacts/Organizations, crm.lead for Opportunities, project.task for Tasks). We use Odoo's message_post method to create note-style messages, preserving the note body, author name, and creation timestamp. The link between a Note and its parent record is reconstructed via the res_model and res_id fields on mail.message.

Insightly CRM

Project

maps to

Odoo CRM

project.project

1:1
Fully supported

Insightly Projects map to Odoo project.project records. If the customer uses Odoo Project module, we import project headers first, then link associated tasks to the correct project. Project status (Active, Completed, Archived) maps to Odoo's project state. Custom fields on Insightly Projects are created as custom columns on project.project in Odoo Studio before import.

Insightly CRM

Tag

maps to

Odoo CRM

crm.tag

1:1
Fully supported

Insightly Tags are flat string labels on Contacts, Organizations, Opportunities, and Projects. Odoo CRM has a crm.tag model that applies to crm.lead records. We export all distinct tag strings, create crm.tag records in Odoo, then apply tags to the corresponding Contacts (via res.partner.category_id) and Opportunities (via crm.lead.tag_ids). Tags that apply to both object types are stored as plain text in a custom field for cross-object reference.

Insightly CRM

Custom Field

maps to

Odoo CRM

Custom Column on target model

lossy
Fully supported

Insightly custom fields require a FIELD_NAME lookup via /CustomFields/{objectName} before any write operation. We retrieve all custom field metadata at the start of the migration, build a FIELD_NAME-to-field_id reference table, and use it for all writes. For each custom field, we create a corresponding custom column in Odoo Studio on the appropriate model (res.partner, crm.lead, project.task, project.project) before importing data. Field types are mapped: Insightly text to char, date to date, dropdown to selection, checkbox to boolean, number to float.

Insightly CRM

Custom Object

maps to

Odoo CRM

Custom Model (ir.model)

1:1
Fully supported

Insightly Custom Objects with user-defined fields map to Odoo custom models created via the Technical menu or Odoo Studio. We create the custom model with matching field definitions (field type, required, index), then import the custom object records via the ORM API with the custom model's name as the model reference. Any lookup relationships within the custom object are recreated as many2one fields pointing to the appropriate Odoo model.

Insightly CRM

Link Record (Contact-to-Organization)

maps to

Odoo CRM

res.partner partner_id field

1:1
Fully supported

Insightly link records (Contact-to-Organization associations) are exported separately from the primary Contact and Organization records. Since we import Organizations first, then Contacts, we reconstruct each link by setting the partner_id field on the contact's res.partner record to the parent's ID. This is the key transformation for this migration: Insightly's explicit AddLink API becomes Odoo's native parent-record reference. We sequence the import as Organizations → Contacts → Link reconstruction to avoid orphaned contacts.

Insightly CRM

Engagement: Email

maps to

Odoo CRM

mail.message

1:1
Fully supported

Insightly email engagements (sent via Insightly's email tracking) map to Odoo mail.message records attached to the parent record (Contact or Opportunity). The email body, subject, and timestamp migrate. Email tracking metadata (opens, clicks) is stored as Insightly-specific fields that have no Odoo CRM equivalent and are noted in the migration summary for the customer's admin.

Insightly CRM

Engagement: Call

maps to

Odoo CRM

mail.activity (type = call)

1:1
Fully supported

Insightly call engagements map to Odoo mail.activity records with activity_type_id set to the built-in Call type. Call duration, disposition, and notes migrate to custom activity fields we create in Odoo Studio before import. Activities are linked to the parent record (Contact, Organization, or Opportunity) via the res_model and res_id fields on mail.activity.

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

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Odoo has no separate Leads object by default

    Insightly treats Leads as a top-level object with a lifecycle distinct from Contacts. Odoo's default CRM module uses crm.lead for both inbound leads and pipeline opportunities without a separate object type. We flag this at scoping and the customer chooses: either create a dedicated Kanban stage in the Odoo pipeline to receive unconverted Insightly Leads, or convert all Insightly Leads to Contacts during migration. If the customer has a high-volume lead funnel that benefits from a separate lead management workflow, Odoo requires the 'CRM - Lead Management' extra module or a custom crm.lead configuration to simulate lead-specific stages.

  • Insightly XML export omits all custom field values

    Insightly's native ZIP export produces XML files containing only default (standard) fields. Custom fields and custom field values are not included. We bypass the XML export path entirely and pull all records including all custom field data via Insightly's REST API using a FIELD_NAME lookup table we build from /CustomFields/{objectName} at the start of every migration. Without this step, custom field data is silently dropped during migration. We confirm this approach with the customer at discovery and use it consistently throughout the engagement.

  • Insightly Workflow Automations do not transfer to Odoo Actions

    Insightly Workflow Automations are event-driven rules defined in the configuration layer. Odoo Actions and Automations use a different trigger-and-action model based on the ORM. We do not migrate automations as code. We deliver a written inventory of every active Insightly Workflow Automation with its trigger condition, actions, and a recommended Odoo equivalent (Automated Actions, Server Actions, or CRM Team assignments) for the customer's admin to configure post-migration. Workflow rebuild is outside the migration scope.

  • Odoo requires Studio schema setup before custom field writes

    Odoo requires custom field definitions to be created in the database before any ORM write can populate them. Unlike some platforms that auto-create fields on first write, Odoo enforces a schema-first approach via Settings > Studio. We create every custom field definition in Odoo Studio before importing Insightly records that contain custom field values. If a custom field is missed during schema setup, Odoo returns an AttributeError on write and the record is flagged in the error log. We cross-check the custom field inventory against the schema before each import phase.

  • Contact-to-Organization link reconstruction requires parent-first import sequencing

    Insightly's explicit link records are not embedded in Contact or Organization primary records. Odoo's partner-based model requires the parent Organization res.partner record to exist before a child Contact res.partner record can set its partner_id field. If Contacts are imported before their parent Organizations, the partner_id reference is null and contacts are orphaned (appearing as standalone contacts without a company). We sequence the import strictly as Organizations first, then Contacts with partner_id resolved, then link reconstruction validation. The customer receives a pre-import count of distinct Organization IDs referenced by Contact links to confirm all parents will be present.

Migration approach

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

  1. Discovery and schema inventory

    We audit the source Insightly account across all object types (Organizations, Contacts, Leads, Opportunities, Projects, Tasks, Notes, Custom Objects), retrieve the full custom field metadata via /CustomFields/{objectName} for each object, export all active Workflow Automations for the rebuild inventory, and count distinct link records (Contact-to-Organization associations). We pair this with a review of the Odoo destination instance: which apps are installed (CRM, Project, Sales), whether Odoo Studio is accessible on the target tier, and whether the customer uses multi-company mode. The discovery output is a written migration scope document listing all objects, custom fields, link counts, and a schema pre-setup checklist for the customer's Odoo admin.

  2. Odoo Studio schema pre-setup

    Before any data import, we create all custom field definitions in Odoo Studio for each model that will receive Insightly data (res.partner, crm.lead, project.task, project.project). We create Kanban pipeline stages in CRM > Pipeline > Stages to match Insightly's pipeline stage names and probability percentages. We configure the crm.lead model to receive either a single unified pipeline or a lead-stage and opportunity-stage split based on the customer's scoping decision. Each stage is assigned a sequence number that determines its position in the Kanban column order.

  3. Organizations first and Contact link reconstruction design

    We import Insightly Organizations as Odoo res.partner records in company mode first. The ORGANIZATION_NAME field becomes the partner's name; address, phone, and website fields map to standard res.partner fields. We then import Contacts with the partner_id field set to the parent Organization's newly created res.partner ID, reconstructing the Insightly explicit link relationship as a native Odoo parent-child reference. Any Contact without a valid Organization link is placed in a reconciliation queue for the customer's admin to resolve before the Opportunities phase.

  4. Opportunity, Project, and Task import

    With Organizations and Contacts validated, we import Insightly Opportunities as Odoo crm.lead records. Each lead is assigned to the correct Kanban stage column (mapped from Insightly pipeline stage names), the expected_revenue is set from the Opportunity monetary value, and the partner_id links to the associated Organization. Projects import as project.project records, and Tasks import as project.task records linked to their parent Project or to an Opportunity via the crm_lead_id field. Custom fields on each model are populated using the FIELD_NAME lookup table built during discovery.

  5. Activity history import via Odoo ORM

    We import Insightly engagement history (calls, emails, meetings, notes) as Odoo mail.message and mail.activity records. Each record is linked to its parent record (Contact, Opportunity, or Task) via res_model and res_id. We use Odoo's ORM API with batch writes and exponential backoff on RPC rate limit responses. Activity timestamps are preserved as write_date on mail.message to maintain the historical timeline order.

  6. Cutover, validation, and Workflow handoff

    We freeze Insightly writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a reconciliation report comparing record counts per object between the Insightly source and the Odoo destination. We deliver the Workflow and Automation rebuild inventory document listing every active Insightly Workflow with its trigger, conditions, and recommended Odoo Actions and Automations equivalent. We do not rebuild Insightly Workflows as Odoo automations inside the migration scope.

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.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

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 Odoo 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 Odoo 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 Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between four and six weeks for accounts under 10,000 Contacts and 3,000 Opportunities with no custom objects and straightforward Contact-to-Organization link graphs. Migrations with custom objects, large task histories (over 200,000 records), complex multi-contact-per-organization link structures, or multi-company Odoo configurations requiring separate res.partner companies move to eight to twelve weeks because of FIELD_NAME lookup preprocessing, link reconstruction validation, and Odoo Studio schema setup per custom field.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Insightly CRM.
Land in Odoo 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