CRM migration
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
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Zilliant CPQ and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
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.
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 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
Odoo CRM
Product Template + Product Variant
1:1Zilliant 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
Odoo CRM
Sale Order
1:1Zilliant 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
Odoo CRM
Pricelist
1:1Zilliant 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
Odoo CRM
Pricelist Item
1:1Zilliant 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
Odoo CRM
Sale Subscription or Partner Pricelist
lossyZilliant 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
Odoo CRM
Partner (res.partner)
1:1Zilliant 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
Odoo CRM
Partner (res.partner, contact type)
1:1Zilliant 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
Odoo CRM
Rule Package Documentation
lossyZilliant 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
Odoo CRM
Custom Fields on Product Template and Partner
lossyBusiness 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
Odoo CRM
Res Users
1:1Zilliant 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
Odoo CRM
Ir Attachment and Mail Message
1:1Zilliant 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)
Odoo CRM
Sale Order Line
1:1Zilliant 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.
| Zilliant CPQ | Odoo CRM | Compatibility | |
|---|---|---|---|
| Product | Product Template + Product Variant1:1 | Fully supported | |
| Quote | Sale Order1:1 | Fully supported | |
| Price List | Pricelist1:1 | Fully supported | |
| Price Item | Pricelist Item1:1 | Fully supported | |
| Sales Agreement | Sale Subscription or Partner Pricelistlossy | Fully supported | |
| Account | Partner (res.partner)1:1 | Fully supported | |
| Contact | Partner (res.partner, contact type)1:1 | Fully supported | |
| Guided Selling Rules | Rule Package Documentationlossy | Mapping required | |
| BDA Custom Fields | Custom Fields on Product Template and Partnerlossy | Fully supported | |
| User | Res Users1:1 | Fully supported | |
| Attachment and Note | Ir Attachment and Mail Message1:1 | Fully supported | |
| Quote Line Item (Sales Item) | Sale Order Line1: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.
Zilliant CPQ gotchas
Groovy scripted logic does not export as data
ERP_ID column may be hidden but still critical
SAP characteristic labels can duplicate after legacy migration
BDA list-type fields lose C4C localization
Attachment downloads could fire multiple times on older builds
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 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.
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.
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.
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.
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.
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
Zilliant CPQ
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 Zilliant CPQ 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
Zilliant CPQ: Not publicly documented.
Data volume sensitivity
Zilliant CPQ 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 Zilliant CPQ to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Zilliant CPQ
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.