CRM migration
Field-level mapping, validation, and rollback between Olqan and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Olqan
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Olqan and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
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.
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 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
Odoo CRM
res.partner (is_company = False)
1:1Olqan 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
Odoo CRM
res.partner (is_company = True)
1:1Olqan 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
Odoo CRM
crm.lead (type = opportunity)
1:1Olqan 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
Odoo CRM
helpdesk.ticket
1:1Olqan 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
Odoo CRM
project.project
1:1Olqan 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
Odoo CRM
project.task
1:1Olqan 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
Odoo CRM
hr.employee
1:1Olqan 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
Odoo CRM
account.analytic.line
1:1Olqan 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
Odoo CRM
account.move (type = out_invoice)
1:1Olqan 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
Odoo CRM
ir.model.fields (x_ prefixed) or res.config.settings
lossyOlqan 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
Odoo CRM
res.users
1:1Olqan 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
Odoo CRM
ir.attachment
1:1File 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.
| Olqan | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (is_company = False)1:1 | Fully supported | |
| Company | res.partner (is_company = True)1:1 | Fully supported | |
| Deal | crm.lead (type = opportunity)1:1 | Fully supported | |
| Ticket | helpdesk.ticket1:1 | Fully supported | |
| Project | project.project1:1 | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Employee | hr.employee1:1 | Fully supported | |
| Time Log | account.analytic.line1:1 | Fully supported | |
| Invoice | account.move (type = out_invoice)1:1 | Fully supported | |
| Custom Field | ir.model.fields (x_ prefixed) or res.config.settingslossy | Fully supported | |
| Owner/User | res.users1:1 | Fully supported | |
| Attachment | ir.attachment1: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.
Olqan gotchas
No mobile app for iOS or Android
Limited third-party integration ecosystem
Mixed-object exports require post-processing
Newer platform with evolving feature set
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Olqan
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Olqan and Odoo 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
Olqan: Not publicly documented.
Data volume sensitivity
Olqan 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 Olqan to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Olqan
Other ways to arrive at Odoo 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.