CRM migration

Migrate from Olqan to Odoo CRM

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

Olqan logo

Olqan

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Olqan and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Olqan to Odoo CRM is a structural migration that spans both CRM and ERP territory. Olqan stores Contacts, Companies, and Deals as separate objects within its unified CRM layer, alongside time logs, task records, invoices, and ticket records. Odoo uses the res.partner model for both contacts and companies, differentiating them by an is_company flag, which means we must split Olqan's Company records into Odoo company partners before importing Olqan contacts as related child partners. Deals from Olqan map to crm.lead records in Odoo CRM with stage names preserved. Cross-module references—tickets linked to contacts, projects linked to employees, invoices linked to companies—require a dependency-ordered import sequence so that parent records exist before child records are inserted. Odoo does not have native equivalents for Olqan's lifetime-deal billing model or its custom automation engine; we document these gaps rather than migrate them. We deliver a written inventory of any Olqan automations and custom fields for Odoo Studio configuration 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

Olqan logo

Olqan

What's pushing teams away

  • Missing mobile app limits access to the platform outside of desktop browsers, frustrating field teams and on-the-go users.
  • Limited third-party integrations restrict connectivity with existing tools, requiring manual workarounds or custom development.
  • Platform immaturity means some features do not function as documented, requiring workarounds or waiting for patches.
  • Integration challenges cause data synchronization issues with external systems, creating duplicate records or missed updates.

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 Olqan objects map to Odoo CRM

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

Olqan

Contact

maps to

Odoo CRM

res.partner (is_company = False)

1:1
Fully supported

Olqan Contacts map to Odoo res.partner records with is_company set to False. The Olqan email field maps to email on res.partner; phone maps to phone; company association from Olqan maps to parent_id pointing to the company partner. We create all company partners first so that the parent_id lookup resolves at Contact import time. Lifecycle stage values from Olqan are stored in a custom char field x_olqan_lifecycle_stage for audit.

Olqan

Company

maps to

Odoo CRM

res.partner (is_company = True)

1:1
Fully supported

Olqan Companies map to Odoo res.partner with is_company set to True. Company name maps to name; address fields map to street, city, state_id, country_id, zip; industry maps to industry_id if the Odoo database has industry classification installed; size maps to employee_size as a char field. The domain field from Olqan is stored as website. Deduplication is by name and domain. Companies must import before Contacts because Contact records reference the parent company via parent_id.

Olqan

Deal

maps to

Odoo CRM

crm.lead (type = opportunity)

1:1
Fully supported

Olqan Deals map to Odoo crm.lead records with type set to opportunity. Deal name maps to name; value maps to planned_revenue; stage maps to stage_id via a pre-configured stage lookup that we create in Odoo before migration. The Olqan pipeline assignment maps to a crm.team on crm.lead, which requires that the Odoo sales team exists in the destination database. Owner from Olqan maps to user_id on crm.lead via email resolution against Odoo res.users.

Olqan

Ticket

maps to

Odoo CRM

helpdesk.ticket

1:1
Fully supported

Olqan Tickets map to Odoo helpdesk.ticket if the Helpdesk module is active in the destination Odoo instance. Ticket subject maps to name; description maps to description; priority maps to priority; agent assignment maps to user_id; customer association maps to partner_id via email dedupe against res.partner. If Helpdesk is not present in the Odoo destination, we map tickets to crm.lead records with a tag indicating ticket origin, and the customer can install Helpdesk post-migration and reassign.

Olqan

Project

maps to

Odoo CRM

project.project

1:1
Fully supported

Olqan Projects map to Odoo project.project records if the Project module is active. Project name maps to name; description maps to description; start and end dates map to date_start and date_deadline. We link project team members from Olqan to Odoo project.task.assignee records via email matching against res.users. Milestones migrate as project.milestone records if the Odoo version supports them.

Olqan

Task

maps to

Odoo CRM

project.task

1:1
Fully supported

Olqan Tasks map to Odoo project.task. Independent tasks link to project_id as null; project-nested tasks link to the corresponding project.project record. Task title maps to name; description maps to description; assignee maps to user_ids (multi-user supported); due date maps to date_deadline; status maps to stage_id via a stage sequence we configure in Odoo before import. Subtask nesting is preserved where Odoo's project task hierarchy supports it.

Olqan

Employee

maps to

Odoo CRM

hr.employee

1:1
Fully supported

Olqan Employee records map to Odoo hr.employee. Job title maps to job_title; department maps to department_id via a department name lookup; contact details map to work_email, work_phone, and private_email; manager hierarchy maps to parent_id referencing another hr.employee. Start date maps to hire_date. Employees are imported before projects and tasks so that assignee references resolve correctly. This object requires the Odoo HR module to be active.

Olqan

Time Log

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

Olqan Time Logs map to Odoo account.analytic.line for timesheet tracking. Hours map to unit_amount; date maps to date; billable flag maps to unit_amount with a separate non-billable flag mapping. The linked task or project reference maps to project_id and task_id on the analytic line. This object requires the Odoo Timesheets module. Historical time logs preserve the original amounts and dates without recalculation.

Olqan

Invoice

maps to

Odoo CRM

account.move (type = out_invoice)

1:1
Fully supported

Olqan Invoices map to Odoo account.move records with type set to out_invoice for customer invoices. Invoice header fields (number, date, due date, status) map to name, invoice_date, invoice_date_due, and state. Line items map to invoice_line_ids with product, description, quantity, and price_unit. This object requires the Odoo Accounting module and assumes the chart of accounts is already configured. Paid invoices are migrated with state set to posted; draft invoices keep state as draft. Payment history migrates as account.move.line records with reconciled flags.

Olqan

Custom Field

maps to

Odoo CRM

ir.model.fields (x_ prefixed) or res.config.settings

lossy
Fully supported

Olqan custom fields on any object migrate to Odoo custom fields created via Odoo Studio (Enterprise) or programmatically via the XML-RPC ir.model.fields API. Field labels and data types are preserved; picklist values become selection fields; multi-value fields become char or many2many depending on Odoo version. If the destination uses Odoo Community, custom field scope is limited to fields created during installation via Studio; programmatically created fields may require a custom module. We flag this constraint during scoping.

Olqan

Owner/User

maps to

Odoo CRM

res.users

1:1
Fully supported

Olqan Owners and Users map to Odoo res.users. Resolution is by email address. Olqan user records referenced on Deals, Tickets, Projects, and Tasks must have a matching Odoo user before those records import. Any Olqan owner without a matching Odoo user enters a reconciliation queue for the customer's admin to provision the res.users record with the correct email and access rights before the migration resumes.

Olqan

Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

File attachments on Olqan Deals, Projects, Tickets, and Tasks migrate as Odoo ir.attachment records linked via res_model and res_id to the corresponding parent record. We preserve the original file name, file content, and create_date. Files above 25 MB are split into chunks for XML-RPC upload. Attachments import after their parent records so that the res_id reference is satisfied at insert 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.

Olqan logo

Olqan gotchas

Medium

No mobile app for iOS or Android

Medium

Limited third-party integration ecosystem

Low

Mixed-object exports require post-processing

Low

Newer platform with evolving feature set

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 res.partner treats contacts and companies as one model

    Olqan stores Contacts and Companies as separate objects; Odoo uses a single res.partner model with an is_company boolean flag distinguishing the two. We split Olqan Company records first, inserting them as res.partner with is_company = True, then insert Olqan Contacts as res.partner with is_company = False and parent_id pointing to the company partner. If Olqan exports mixed-object files, we parse and separate them before loading. Skipping this split results in orphaned contact records with no company association and broken deal links.

  • Odoo Community has no native custom field support

    Olqan supports custom fields on all CRM objects across all pricing tiers. Odoo Community does not expose Studio or the UI for custom field creation; custom fields require either the Enterprise edition or a custom module installed via the Odoo apps interface. We flag this constraint during scoping. If the customer is on Odoo Community, we store Olqan custom field values as a JSON blob in a char field and recommend upgrading to Enterprise or commissioning a custom module for proper field typing.

  • Ticket migration requires the Helpdesk module

    Olqan's native Ticket module has no direct Odoo CRM equivalent. Odoo's crm.lead is for sales opportunities, not customer support tickets. The helpdesk.ticket object exists in the Odoo Helpdesk module, which is a separate installation and subscription from the base CRM. If Helpdesk is not installed at migration time, we map tickets to crm.lead with a tag, and the customer installs Helpdesk post-migration to reassign. We document the mapping so that a later helpdesk.ticket import can cross-reference the original crm.lead records by external ID.

  • Cross-module dependencies require dependency-ordered import

    Olqan's unified workspace means a single export may contain mixed object types with interdependencies: tickets linked to contacts, projects linked to employees, invoices linked to companies, time logs linked to tasks. Odoo's XML-RPC API enforces foreign-key constraints at insert time, so parent records must exist before children. We define a strict import order: companies and users first, then contacts, then deals and projects, then tasks, then time logs, then tickets, then invoices, then attachments. Any unresolved parent reference blocks the child insert until the parent exists.

  • Automation rules do not migrate between platforms

    Olqan's automation features (available on Professional tier) and Odoo's server actions, workflow rules, and automated activities are structurally different configuration models. We do not migrate automation as code. We extract a written inventory of every Olqan automation rule with its trigger, conditions, actions, and module scope, and the customer's Odoo administrator or a certified Odoo partner rebuilds them using Odoo Studio or Python server actions post-migration. Olqan's lifetime-deal billing model has no Odoo equivalent and is not migrated.

Migration approach

Six steps for a successful Olqan to Odoo CRM data migration

  1. Discovery and Odoo module selection

    We audit the source Olqan instance across all active modules: CRM (Contacts, Companies, Deals), Projects (tasks, time logs, milestones), HR (Employees, departments), Finance (Invoices, line items), and Tickets. We identify record counts per object, active custom fields, user and owner assignments, and any workflow or automation rules configured. We pair this with an Odoo module recommendation: which Odoo apps (CRM, Project, Timesheets, HR, Accounting, Helpdesk) the destination instance needs installed and active before migration begins. The discovery output is a written migration scope and a module activation checklist.

  2. Schema design and res.partner split design

    We design the destination schema in Odoo. This includes pre-creating custom fields via ir.model.fields XML-RPC calls or Odoo Studio export, configuring CRM stages and sales teams via crm.stage and crm.team records, setting up project stages and task states via project.task.type, and defining the res.partner split rule: Olqan Company records become res.partner with is_company = True; Olqan Contact records become res.partner with is_company = False and parent_id pointing to the matched company partner. Schema setup runs in an Odoo test database first for validation.

  3. Test migration and reconciliation

    We run a full migration into the Odoo test environment using production-like data volume. The customer's Odoo administrator reconciles record counts (partners in, contacts with company in, leads in, tasks in, tickets in), spot-checks 25-50 random records against the Olqan source for field accuracy, and validates cross-references (contact-to-company links, task-to-project links, ticket-to-contact links). Any mapping corrections and missing stage or team configurations are resolved here before production migration begins.

  4. Owner and user provisioning

    We extract every distinct Olqan Owner and User referenced on Deals, Projects, Tickets, Tasks, and Invoices and match by email against the Odoo destination's res.users table. Any Olqan owner without a matching Odoo user enters a reconciliation queue for the customer's admin to provision the res.users record with the correct email and group assignments before record import resumes. This step gates all subsequent object imports because OwnerId and user_ids references are required on most Odoo records.

  5. Production migration in dependency order

    We run production migration following the strict dependency order: res.users (manual provisioning validated), res.partner companies (is_company = True), res.partner contacts (is_company = False with parent_id), hr.employee records, crm.lead opportunities, project.project records, project.task records, account.analytic.line time logs, helpdesk.ticket records (or crm.lead fallback), account.move invoices, and ir.attachment files last. Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC with batch chunking, sleep intervals between batches for rate-limit handling, and retry logic on transient failures.

  6. Cutover, validation, and automation handoff

    We freeze Olqan write access during the cutover window, run a final delta migration of any records created or modified after the initial export, and enable Odoo as the system of record. We deliver the Olqan automation and custom field inventory document to the customer's admin team with Odoo Studio equivalents noted. We support a one-week hypercare window where we resolve any record linkage or data quality issues raised by the customer's team. We do not rebuild Olqan automations as Odoo server actions inside the migration scope; that is a separate Odoo implementation engagement.

Platform deep dives

Context on both ends of the pair

Olqan logo

Olqan

Source

Strengths

  • Combines CRM, project management, HR, finance, and ticketing in a single platform
  • Intuitive interface with low learning curve for non-technical users
  • Responsive customer support willing to build custom features
  • Automation capabilities across multiple business functions
  • Lifetime deal options available for cost-conscious buyers

Weaknesses

  • No mobile app limits accessibility for remote or field-based teams
  • Third-party integration ecosystem is limited compared to established CRMs
  • Platform is relatively new with some features still maturing
  • Documentation coverage may be incomplete for advanced or edge-case scenarios
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?

Standard CRM migration. 2 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 Olqan 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

    B

    Olqan: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Olqan 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 Olqan to Odoo CRM data migrations

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

Can't find your answer?

Walk through your Olqan 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, 5,000 Deals, and a single CRM module without Projects, HR, or Finance. Migrations with cross-module data (Projects, Employees, Invoices, Tickets) that require Odoo Project, HR, or Accounting modules to be installed and configured move to ten to sixteen weeks because of dependency sequencing, chart-of-accounts coordination, and Odoo Studio custom field setup. Discovery and test migration alone take two to three weeks regardless of scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Olqan.
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