CRM migration

Migrate from Zilliant CPQ to Odoo CRM

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

Zilliant CPQ logo

Zilliant CPQ

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Zilliant CPQ and Odoo CRM.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Zilliant CPQ to Odoo CRM is a data consolidation from a purpose-built manufacturing CPQ into a modular open-source ERP/CRM platform. Zilliant CPQ treats Products as the base entity with layered pricing schemes (catalog, matrix, agreement, override) and uses Groovy scripting for bespoke business logic that does not survive direct export. We extract Products and their variant configurations as structured records, preserve Price List hierarchies and ERP_ID cross-references (including UI-hidden columns), map Sales Agreements to Odoo Sale Subscriptions with tiered pricing limitations flagged upfront, and deliver a written rule package for every active Guided Selling constraint. We do not migrate Groovy scripts, workflow automations, or BDA localization from C4C—these require manual reimplementation in Odoo Studio or Python after cutover. Odoo's Community edition provides the CRM and Sales apps at no per-seat cost; the Enterprise edition adds support, a mobile app, and advanced features at $828/user/year.

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

Zilliant CPQ logo

Zilliant CPQ

What's pushing teams away

  • Slow loading and performance issues during complex operations are the most cited frustrations, particularly during quote generation with many line items
  • Time lag between configuration completion and pricing calculation creates friction in fast-moving sales cycles, with users describing it as a recurring bottleneck
  • Manufacturing complexity that exceeds the platform's constraint-based configuration model forces teams to maintain workarounds outside CPQ, undermining the single-source-of-truth goal
  • Integration complexity with multiple ERP systems (SAP, Salesforce) creates data synchronization drift that requires manual correction
  • Some users report the platform's opinionated approach to pricing logic conflicts with unique discounting requirements in their specific vertical

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

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

Zilliant CPQ

Product

maps to

Odoo CRM

Product Template + Product Variant

1:1
Fully supported

Zilliant Products map to Odoo Product Templates with variant configurations handled via Product Attributes and Variants. The Zilliant product hierarchy (parent-child relationships) maps to Odoo's internal category structure and optional subcategory fields. Custom product attributes from Zilliant BDAs map to Odoo custom fields on product.template. Multi-variant products with characteristic-based configuration in Zilliant require a pre-migration review of the attribute set because Odoo generates variants as separate records from attribute combinations rather than as nested configuration rows.

Zilliant CPQ

Quote

maps to

Odoo CRM

Sale Order

1:1
Fully supported

Zilliant Quotes map to Odoo Sale Orders. Quote headers migrate as sale.order records; Sales Items migrate as sale.order.line records. Quote status states (Draft, Pending Approval, Approved, Lost) map to Odoo sale.order state values (draft, sent, sale, cancel) with a custom field quote_original_status__c preserving the Zilliant lifecycle stage. Historical signed quotes migrate as sale.order records locked to the original status without triggering Odoo's confirmation workflow.

Zilliant CPQ

Price List

maps to

Odoo CRM

Pricelist

1:1
Fully supported

Zilliant Price Lists (catalog, reference, global list, published, matrix) map to Odoo Pricelists. Catalog price types map to Odoo Public Pricelists; agreement pricing maps to Customer Pricelists linked to res.partner records. Matrix pricing with multiple dimension rules requires decomposition into Odoo Pricelist Rules with computed discount or minimal-price logic. Multi-currency Price Lists in Zilliant map to Odoo Pricelist records with the currency_id set per Pricelist.

Zilliant CPQ

Price Item

maps to

Odoo CRM

Pricelist Item

1:1
Fully supported

Zilliant Price Items link to Products and belong to Price Lists. The ERP_ID cross-reference column (id_col_quote_configuration_priceItems_erpId) is explicitly queried even when UI Profiles hide it from the Zilliant interface. ERP_ID values migrate to a custom field zilliant_erp_id__c on Odoo's product.pricelist.item for downstream order-fulfillment integration. Price Item effective date ranges map to Odoo Pricelist Item date_start and date_end fields.

Zilliant CPQ

Sales Agreement

maps to

Odoo CRM

Sale Subscription or Partner Pricelist

lossy
Fully supported

Zilliant Sales Agreements with customer-specific pricing, effective date ranges, and discount tiers map to Odoo Sale Subscriptions (if the customer licenses the Subscription app) or to Customer Pricelists with manual discount rules. Tiered discount structures in Zilliant Sales Agreements require decomposition into multiple Pricelist Rules in Odoo because Odoo does not natively support quantity-threshold tiering on Customer Pricelists without the Subscription module. We flag the module requirement during scoping.

Zilliant CPQ

Account

maps to

Odoo CRM

Partner (res.partner)

1:1
Fully supported

Zilliant Accounts map to Odoo res.partner records with the company type (customer, company) set per record. Large account hierarchies with custom address structures migrate as partner records with parent_id set to the hierarchy parent and address fields standardized to Odoo's street, street2, city, state_id, zip, country_id format. Partner-specific pricing from Zilliant Sales Agreements links to res.partner via a dedicated Customer Pricelist.

Zilliant CPQ

Contact

maps to

Odoo CRM

Partner (res.partner, contact type)

1:1
Fully supported

Zilliant Contacts map to Odoo res.partner records with type=contact and a parent_id linking to the company Partner record. PartnerRoleRecord associations on Zilliant Contacts migrate to Odoo res.partner records with the role captured in a custom field contact_role__c. Custom BDA fields on Zilliant Contacts map to custom fields on res.partner with type-mapped values (String to char, Boolean to boolean, Decimal to float).

Zilliant CPQ

Guided Selling Rules

maps to

Odoo CRM

Rule Package Documentation

lossy
Mapping required

Zilliant Guided Selling rules (characteristic-based constraints on product configuration) are stored as structured rule packages that we export as JSON documentation with product family groupings, constraint logic, and dependency chains. Odoo has no native guided selling or constraint-based configuration engine. We deliver the rule package as a written specification that the customer's Odoo developer or functional consultant uses to implement configuration logic in Python, Odoo Studio, or a custom addon. Rules do not migrate as executable code.

Zilliant CPQ

BDA Custom Fields

maps to

Odoo CRM

Custom Fields on Product Template and Partner

lossy
Fully supported

Business Data Attributes from Zilliant CPQ map to Odoo custom fields. String-type BDAs map to ir.model.fields with ttype=char; Boolean BDAs to ttype=boolean; Decimal BDAs to ttype=float. C4C localized display labels on list-type BDA fields are not preserved in Zilliant CPQ—only the raw list code value transfers. We flag every list-type BDA during scoping and advise customers to re-establish translated labels from C4C source records after migration. The field mapping document specifies the Odoo field name, type, and any required validation.

Zilliant CPQ

User

maps to

Odoo CRM

Res Users

1:1
Fully supported

Zilliant Users map to Odoo res.users records. We resolve users by email match. Domain-approval restrictions in Zilliant (unapproved email domains blocking sign-in) map to Odoo's allowed_company_ids and multi-company access rules. UI Profile field visibility settings in Zilliant do not have a direct Odoo equivalent; we document them as Odoo field-level access rules for the customer's admin to implement in Settings > Users > Access Rights.

Zilliant CPQ

Attachment and Note

maps to

Odoo CRM

Ir Attachment and Mail Message

1:1
Fully supported

Zilliant Quote attachments migrate as Odoo ir.attachment records linked to the sale.order via res_model=sale.order and res_id=the sale.order ID. Notes in the Zilliant Notes section migrate as Odoo mail.message records on the sale.order chatter. A documented Zilliant bug (resolved in a recent patch) caused single-click attachment downloads to trigger multiple downloads on older builds—customers should verify their source environment patch status before migration to determine whether attachment count metadata reflects intentional uploads or the bug artifact.

Zilliant CPQ

Quote Line Item (Sales Item)

maps to

Odoo CRM

Sale Order Line

1:1
Fully supported

Zilliant Sales Items map to Odoo sale.order.line records with product_id resolved from the Product Template migration, product_uom_qty from quantity, and price_unit from the Zilliant Price Item calculation. Complex BOM item configurations with nested quantity settings require recursion depth analysis during scoping because Odoo's BOM explosion in the Manufacturing app may not automatically replicate the same nested structure. We flag BOM recursion depth and recommend a manual BOM rebuild verification step before production migration.

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.

Zilliant CPQ logo

Zilliant CPQ gotchas

High

Groovy scripted logic does not export as data

Medium

ERP_ID column may be hidden but still critical

Medium

SAP characteristic labels can duplicate after legacy migration

Medium

BDA list-type fields lose C4C localization

Low

Attachment downloads could fire multiple times on older builds

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

  • Groovy scripted logic does not migrate as data

    Zilliant CPQ allows custom business logic via Groovy scripts that modify standard functionality. These scripts are configuration artifacts, not data records—they do not appear in standard CSV exports or API bulk reads. We catalog every active Groovy script during scoping, export its logic as text documentation, and flag it for manual reimplementation in Odoo Python or Odoo Studio. This is a known limitation documented in Zilliant CPQ's schema architecture and applies to every migration destination, not just Odoo.

  • ERP_ID column may be hidden but is still required

    The ERP_ID column on Zilliant Price Item rows uses the UI field ID id_col_quote_configuration_priceItems_erpId and can be hidden system-wide or per-role via UI Profiles. Migration tooling that reads only visible columns will miss the ERP cross-reference that downstream order-fulfillment systems depend on. We explicitly query hidden column data during extraction. In Odoo, we store this value in a custom field zilliant_erp_id__c on the Pricelist Item so that the integration team can map it to Odoo's product.supplierinfo or external ID mapping for ERP sync.

  • SAP characteristic labels can duplicate after legacy migration

    A documented issue in Zilliant CPQ (resolved in a recent patch) caused SAP characteristics to create duplicate labels during CPQ migrations from legacy systems. If the source Zilliant environment predates the fix, we run a label-deduplication pass on characteristic values before importing to Odoo. Duplicate characteristic options in Odoo would create spurious product variant combinations and must be resolved before product variant generation.

  • Odoo lacks native guided selling and constraint-based configuration

    Zilliant's Guided Selling rules and constraint-based configuration are purpose-built for complex manufactured products and have no native Odoo equivalent. The migration does not reproduce these rules as executable logic in Odoo. We deliver a written rule package per product family that documents each constraint, its trigger condition, and the recommended Python or Odoo Studio implementation. This requires a separate Odoo development engagement or internal developer work after migration cutover.

  • BDA list-type fields lose C4C localization

    Custom BDA fields mapped from SAP C4C store only the raw list code value in Zilliant CPQ—C4C's localized display labels are not synced. When these BDA fields migrate to Odoo custom fields, the Odoo field displays the raw code value without the localized label context. We flag every list-type BDA during scoping and advise customers that translated labels will need to be re-established from C4C source records post-migration. This is a Zilliant CPQ platform limitation that applies regardless of the destination platform.

Migration approach

Six steps for a successful Zilliant CPQ to Odoo CRM data migration

  1. Discovery and Zilliant environment audit

    We audit the source Zilliant CPQ environment across product count, variant complexity, Price List hierarchy depth, Price Item volume, Sales Agreement count, active Groovy scripts, BDA field definitions, and quote history size. We identify hidden ERP_ID columns via UI Profile inspection and verify the Zilliant patch version to determine whether SAP characteristic label deduplication is required. We pair this with an Odoo edition assessment: Community (free, self-implemented) covers most migrations; Enterprise ($828/user/year) adds support, mobile access, and advanced reporting. The discovery output is a written migration scope with product family groupings for phased import sequencing.

  2. Odoo schema provisioning and Pricelist design

    We provision the Odoo destination environment with Product Templates, Product Attributes, and variant generation rules matching the Zilliant product model. We create the Pricelist hierarchy (Public Pricelists, Customer Pricelists, and Pricelist Rules) replicating the Zilliant catalog, matrix, and agreement pricing tiers. Custom fields for BDA data and ERP_ID cross-references are deployed before any record import. If the customer licenses the Odoo Subscription app, we configure Sale Subscriptions for Sales Agreement mapping; otherwise we use Customer Pricelists with manual discount rules. Schema is deployed into an Odoo staging database first for validation.

  3. Groovy script cataloguing and rule package documentation

    We run a full enumeration of active Groovy scripts in the Zilliant environment. Each script is exported as text documentation with its trigger context, logic summary, and affected object. We produce a written rule package per product family grouping the guided selling constraints and their configuration dependencies. This documentation is handed off to the customer's Odoo developer or functional consultant before cutover. We do not execute or translate Groovy logic into Python as part of the migration scope.

  4. Sandbox migration and reconciliation

    We run a full migration into the Odoo staging environment using production-like data volumes. The customer's team reconciles record counts (Products in, Variants generated, Price Lists created, Pricelist Items populated, Sales Agreements mapped, Quote history loaded) and spot-checks 25-50 records against the Zilliant source. Particular attention is paid to ERP_ID column values on Price Items, BOM recursion depth on complex product configurations, and BDA field values on Contacts and Products. Mapping corrections are made in staging before any production migration step.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Product Templates (with Attributes set), Product Variants (generated from attribute combinations), Public Pricelists (base pricing), Customer Pricelists (partner-specific pricing), Pricelist Items (with ERP_ID and effective dates), Sales Agreements (mapped to Subscriptions or Customer Pricelists), Partners (Accounts and Contacts with hierarchy), Sale Orders (Quote history with line items), and Attachments (linked to Sale Orders via ir.attachment). BOM structures for complex assemblies are documented separately for manual Odoo Manufacturing app setup. Groovy script documentation is delivered as a reference package before production migration begins.

  6. Cutover, validation, and guided selling rebuild handoff

    We freeze Zilliant CPQ writes during cutover, run a final delta migration of records modified during the migration window, then enable Odoo as the system of record. We deliver the Guided Selling rule package to the customer's Odoo developer or functional consultant for Python or Odoo Studio reimplementation. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's sales or operations team. We do not implement Odoo Guided Selling or constraint-based configuration as part of the migration scope; that is a separate development engagement.

Platform deep dives

Context on both ends of the pair

Zilliant CPQ logo

Zilliant CPQ

Source

Strengths

  • Variant configuration models for complex manufactured products are purpose-built and accessible to sales teams without engineering involvement
  • Real-time pricing calculations and dynamic cost estimations eliminate manual quote math errors
  • Guided selling flows steer reps toward margin-positive configurations automatically
  • Salesforce CPQ and SAP integrations are natively supported with documented connector endpoints
  • Product modeling supports characteristic-based rules for assemble-to-order and engineer-to-order workflows

Weaknesses

  • Performance degradation on complex operations with many line items is a documented user complaint
  • Configuration-to-pricing lag creates quote turnaround friction in fast sales cycles
  • Heavy reliance on Groovy scripting for custom logic means bespoke workflows do not export cleanly
  • BDA custom-field architecture between C4C and CPQ introduces localization loss on list-type fields
  • No publicly documented API rate limits or bulk-export mechanism in available documentation
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 Zilliant CPQ 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

    Zilliant CPQ: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Zilliant CPQ 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 eight weeks for organizations with under 5,000 Products, 15 Price Lists, and 500 Sales Agreements with no complex BOM structures. Migrations with multi-level BOM product configurations, large Price Item volumes (over 50,000 Pricelist Items), large quote histories, or extensive BDA field localization requirements move to ten to sixteen weeks because of BOM recursion analysis, Price Item deduplication passes, and Guided Selling rule documentation scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Zilliant CPQ.
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