CRM migration

Migrate from openCRX to Odoo CRM

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

openCRX logo

openCRX

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between openCRX and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from openCRX to Odoo CRM is a structural migration across fundamentally different data models and technology stacks. openCRX models the sales cycle through abstract contract and contract-position classes, with Accounts split into LegalEntity and Contact subclasses and rich Activity objects for time-tracking. Odoo CRM unifies Lead and Opportunity in crm.lead, maps Companies to res.partner with type=company, and links individual contacts as child records with address relations. We resolve the LegalEntity-Contact hierarchy during scoping, collapsing openCRX's dual-account pattern into Odoo's partner-address model, and we extract activity tracker groupings as tags or stage comments to preserve grouping context. openCRX Workflow Processes and Alert Topics are segment-scoped and non-portable; we deliver a written inventory of every process definition for the customer's admin to rebuild in Odoo Studio.

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

openCRX logo

openCRX

What's pushing teams away

  • The user interface is unintuitive and the learning curve is steep, making day-to-day usage challenging for non-technical teams without dedicated administrator resources.
  • Comprehensive formal documentation is lacking, forcing teams to reverse-engineer behaviour from UML models, Javadoc, and community forum posts.
  • No official commercial support channel exists; users must rely on community resources or internal expertise when production issues arise.
  • Pre-built integrations with popular third-party tools are minimal, requiring custom development effort to connect openCRX to modern SaaS stacks.

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

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

openCRX

Account (LegalEntity)

maps to

Odoo CRM

res.partner (type=company)

1:1
Fully supported

openCRX LegalEntity records map directly to Odoo res.partner with partner_type set to company. The LegalEntity name maps to name, postal address from the related PostalAddress object maps via address fields (street, city, country, zip), and phone from related PhoneNumber maps via phone. openCRX multi-currency settings per LegalEntity map to Odoo partner properties. We resolve the parent-child LegalEntity hierarchy into Odoo's commercial partner link if present.

openCRX

Account (Contact)

maps to

Odoo CRM

res.partner (type=contact)

1:many
Fully supported

openCRX Contact records map to Odoo res.partner with type=contact, linked to a parent res.partner (type=company) via parent_id. Contact's PostalAddress and PhoneNumber relations map to Odoo partner address fields. openCRX's Contact.fullName splits into firstname and lastname on Odoo. We use email as the dedupe key across both LegalEntity and Contact imports. Role-based attributes on openCRX Contact (e.g., buyer, decision-maker) are preserved as tags on the Odoo partner record.

openCRX

Opportunity

maps to

Odoo CRM

crm.lead (stage=opportunity)

1:1
Fully supported

openCRX Opportunities inherit from the abstract contract hierarchy and carry deal fields, ratings, and associated notes. We map Opportunity to Odoo crm.lead where type=opportunity (versus type=lead for unqualified prospects). The openCRX contract rating maps to crm.lead probability. Stage transitions and timestamps from openCRX activity on the Opportunity are preserved as stage change comments and activity history in Odoo.

openCRX

Quote

maps to

Odoo CRM

sale.order (state=quotation)

1:1
Fully supported

openCRX Quotes inherit from the same contract hierarchy as Opportunities and Sales Orders, with line positions modelled as contract positions. We map Quote to Odoo sale.order in quotation state. Quote positions map to sale.order.line with product, quantity, price_unit, and discount preserved. openCRX's multi-currency pricing rules carry into Odoo currency_id and price_list_id on the sale.order.

openCRX

Sales Order

maps to

Odoo CRM

sale.order (state=sale)

1:1
Fully supported

openCRX Sales Orders follow the contract hierarchy and can be transformed from Quotes. The Sales Order header maps to Odoo sale.order with state=sale. Each order position maps to sale.order.line with product_id, product_uom_qty, price_unit, and discount preserved. If the Sales Order was created from a Quote, we map the sale.order.source_document to the original sale.order quotation.

openCRX

Invoice

maps to

Odoo CRM

account.move

1:1
Fully supported

openCRX Invoices are terminal contract objects in the sales process chain, inheriting from contract classes. We map Invoice headers to Odoo account.move records of type=out_invoice, preserving invoice number, date, and payment terms. Line positions map to account.move.line records. openCRX's payment status and currency context carry into Odoo's invoice state and currency_id. Invoices in openCRX that are posted or reconciled map to Odoo posted account.moves.

openCRX

Product

maps to

Odoo CRM

product.product + product.pricelist

1:1
Fully supported

openCRX Products with bundles and design-to-order configurations map to Odoo product.product with type=service or type=product. openCRX multi-currency price lists and run-time pricing rules map to Odoo product.pricelist records. openCRX Product.run_time_pricing rules become Odoo pricelist rule records. We capture product.product fields name, default_code, list_price, standard_price, type, and categ_id during import.

openCRX

Activities and Activity Trackers

maps to

Odoo CRM

mail.activity

1:1
Mapping required

openCRX Activities with time-tracking map to Odoo mail.activity records. Activity Tracker groupings in openCRX (which group related activities under a named tracker) map to Odoo mail.activity.type and stage_id on crm.lead, or to tags if the tracker structure does not map cleanly to a stage. Custom feature definitions on openCRX activity subtypes are identified during scoping and mapped to Odoo custom activity type definitions. Activity timestamps and duration carry into Odoo date_deadline and activity_date_deadline.

openCRX

User-Defined Attributes (DataBinding PropertySet)

maps to

Odoo CRM

ir.model.fields (custom fields)

lossy
Mapping required

openCRX custom fields added via DataBinding PropertySet are stored as feature definitions bound to CrxObject at runtime. We identify all active PropertySet custom fields during scoping, map their data types to Odoo field definitions (Char, Text, Float, Integer, Date, Datetime, Many2one, One2many), and pre-create them as ir.model.fields on the relevant res.partner, crm.lead, or product.product model before migration begins. openCRX multi-valued PropertySet attributes become Odoo One2many or Many2many relations where the data model supports it.

openCRX

Attachments

maps to

Odoo CRM

ir.attachment

1:1
Mapping required

openCRX stores binary attachments linked to objects via its document management layer. We extract attachment metadata and file content from the export process. During Odoo import, attachments re-attach to the corresponding migrated record (res.partner, crm.lead, sale.order) via ir.attachment records with res_model and res_id pointing to the target record. We run the export on a Linux or macOS client to avoid the Windows WebDAV quirks that affect openCRX file access. We flag any attachment whose original file is inaccessible due to WebDAV path issues for manual re-upload.

openCRX

Users and Roles

maps to

Odoo CRM

res.users

1:1
Mapping required

openCRX role-based security with segment-scoped user assignments maps to Odoo res.users. We extract active users by email from openCRX and match against Odoo user records. openCRX segment membership maps to Odoo sales team membership via crm.team member records. Permissions and access levels from openCRX roles are documented in the migration scope for the customer's admin to reassign manually in Odoo Access Rights configuration. We do not map openCRX role definitions to Odoo groups as the models are structurally different.

openCRX

Workflow Processes

maps to

Odoo CRM

Studio automation (rebuild required)

1:1
Mapping required

openCRX Workflow Processes are segment-scoped and stored as instance-bound definitions, not as records that can be exported and re-imported. We extract workflow process definitions (trigger conditions, actions, assigned activities) during discovery and deliver them as a written inventory for the customer's admin to rebuild in Odoo Studio. This is not a code migration; it is a process audit and handoff. Alert Topics follow the same constraint and are documented separately.

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.

openCRX logo

openCRX gotchas

High

No public REST API with documented rate limits

Medium

WebDAV client quirks block document access on Windows

Medium

"Too many open files" on Linux blocks installation and export

Low

Workflow Processes are segment-scoped and non-portable

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

  • openCRX has no public REST API with documented rate limits

    openCRX exposes its data through JMX and internal application-layer APIs but does not publish a public REST API. Every openCRX migration requires direct database access or application-layer export scripting tailored to the customer's specific openCRX version and deployment configuration. We coordinate with the customer's DBA to obtain a read-only database export or to script exports through the openCRX application layer before beginning any transformation work. Any API-based migration approach must be scoped against the customer's specific deployment; there is no universal openCRX API endpoint to target.

  • openCRX LegalEntity-Contact hierarchy does not map directly to Odoo res.partner

    openCRX uses Account as a base class split into LegalEntity and Contact subclasses, each with their own PostalAddress and PhoneNumber relations. Odoo CRM uses a single res.partner object where type=company distinguishes organisations from individuals and parent_id links child contact records to the parent company. We resolve this mismatch during scoping by flattening openCRX's dual-account pattern: LegalEntity becomes res.partner (type=company) and Contact becomes res.partner (type=contact) with parent_id pointing to the LegalEntity. Mis-resolved hierarchy mappings produce orphaned contacts or duplicate companies that require post-import cleanup.

  • Odoo CRM does not support Pipelines or Custom Object Schemas via API

    The Apideck Odoo CRM connector documentation lists Pipelines and Custom Object Schemas as not supported (marked 'Considering') and Custom Objects as not supported at the same status. If the openCRX migration involves complex custom data structures built on DataBinding PropertySet, we pre-create these as Odoo custom modules (ir.model, ir.model.fields) before migration rather than relying on API-based schema creation. Workflow and automation rebuilds must use Odoo Studio or server actions rather than programmatic API provisioning. We flag the absence of native pipeline API support during scoping.

  • Windows WebDAV breaks openCRX attachment access

    openCRX uses WebDAV for its groupware document layer, but Microsoft's WebDAV implementation on Windows is known to fail silently with connection errors and file access issues. We run all attachment extraction on a Linux or macOS client to avoid these failures. Any attachment export attempted from a Windows host without third-party WebDAV client software (BitKinex or equivalent) risks missing file content. We include a pre-flight check for the export environment and document any attachments that could not be accessed due to WebDAV path issues for manual re-upload in Odoo after migration.

  • openCRX Workflow Processes and Alert Topics do not migrate

    openCRX Workflow Processes are segment-scoped and tightly bound to the running instance; they are not standalone records that can be exported and re-imported into Odoo. Alert Topics are infrastructure configuration objects that drive email notifications based on object lifecycle events. Neither migrates as code. We document every active openCRX Workflow Process definition during discovery and deliver it as a written process map for the customer's admin to rebuild in Odoo Studio. We do not attempt to transfer Workflow Processes or Alert Topics as part of the data migration scope.

Migration approach

Six steps for a successful openCRX to Odoo CRM data migration

  1. Source environment audit and export strategy

    We audit the openCRX deployment: version, segment count, active custom fields (DataBinding PropertySet), user count, and record volumes across Account, Opportunity, Quote, Sales Order, Invoice, Activity, and Attachment objects. Because openCRX has no public REST API, we work with the customer's DBA to obtain a read-only PostgreSQL or H2 database export, or we script exports through the openCRX application layer. We resolve the open file limit on Linux export hosts (ulimit increase to 2048 or 4096) as a pre-flight check. The output is a written migration scope with record counts and a confirmed export approach.

  2. Destination schema design and custom field pre-creation

    We design the Odoo CRM schema before any data moves. This includes enabling the CRM, Sale, and Invoicing apps; creating custom fields on res.partner, crm.lead, sale.order, and product.product to capture openCRX properties that have no direct Odoo equivalent; configuring CRM pipeline stages mapped from openCRX deal stages; and setting up sales team membership from openCRX segment-based role assignments. For openCRX custom objects, we pre-create Odoo custom modules via ir.model and ir.model.fields definitions. Schema is validated in an Odoo test database before production migration begins.

  3. Data extraction and transformation

    We extract data from openCRX using the agreed export approach (database read or application-layer script). The extracted data is then transformed: openCRX LegalEntity and Contact records are split and re-parented to fit Odoo's res.partner model; openCRX contract-position hierarchy is flattened to sale.order and sale.order.line records; openCRX activities are mapped to mail.activity with activity tracker groupings preserved as tags or stage comments; openCRX custom PropertySet attributes are mapped to the pre-created Odoo custom fields. We produce a transformation log identifying any records with unmapped fields for the customer's review before import.

  4. Odoo module configuration

    We configure Odoo CRM with the apps required for the migration scope: CRM (required), Sale Management (for quotations and sales orders), Invoicing (for account.move records), and Project if activity groupings require it. We configure multi-currency and price lists, assign Odoo sales team structure based on openCRX segments, and set up field-level access for the migration user. Validation rules and required-field constraints are reviewed and, where necessary, temporarily disabled or scoped to exclude migration-context records to prevent import rejections.

  5. Production migration in dependency order

    We run production migration in dependency order using Odoo's XML-RPC API: res.partner records first (Companies from LegalEntity, then Contacts with parent_id resolved), then product.product and product.pricelist entries, followed by crm.lead records (with the Lead-Opportunity split applied), then sale.order quotations, confirmed sales orders, and account.move invoices, and finally mail.activity and ir.attachment records. Parent-record lookups (AccountId on Contact, PartnerId on crm.lead, OrderId on sale.order.line) are resolved before each insert batch. Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, validation, and Workflow handoff

    We freeze writes to openCRX during cutover, run a final delta migration for any records modified during the migration window, then enable Odoo as the system of record. We reconcile record counts against the openCRX source export across all objects and spot-check 25-50 records per object for field-level accuracy. We deliver the openCRX Workflow Process inventory document to the customer's admin for rebuild in Odoo Studio. We support a one-week hypercare window for reconciliation issues. We do not rebuild openCRX Workflow Processes as Odoo automations inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

openCRX logo

openCRX

Source

Strengths

  • Zero licensing cost with full source code, UML models, and Javadoc published under a BSD licence.
  • Enterprise-grade data model covering the full sales cycle from Lead through Invoice with full position-level detail.
  • Built on standard J2EE 6 Web Profile and Apache TomEE, running on any OS with Java VM support.
  • Multi-currency, multi-language, and multi-entity capabilities designed for global enterprise deployments.
  • Role-based security with system-wide audit trail meets requirements for regulated industry deployments.

Weaknesses

  • Self-hosting responsibility means no vendor-managed uptime, backups, or security patching.
  • No official commercial support; production issues require community resources or internal Java expertise.
  • Steeper operational burden compared to SaaS CRMs, requiring dedicated server administration.
  • Scarce pre-built third-party integrations; most connectors require custom development.
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. All 8 core objects map 1:1 between openCRX and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across openCRX and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between openCRX and Odoo CRM.

  • 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

    openCRX: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your openCRX 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 three and five weeks for accounts under 25,000 Accounts and 5,000 Opportunities with standard field mapping and no custom objects. Migrations with custom objects built on openCRX DataBinding PropertySet, large activity histories (over 500,000 records), or multi-module Odoo targets (CRM plus Sales, Invoicing, or Project) move to seven to twelve weeks because of custom field pre-creation, Odoo module configuration, and batch API time.

Adjacent paths

Related migrations to explore

Ready when you are

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