CRM migration
Field-level mapping, validation, and rollback between Black Ice CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Black Ice CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Black Ice CRM and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Black Ice CRM to Odoo CRM is a migration from a niche UK-focused modular CRM into a full open-source business suite. Black Ice CRM stores the full sales cycle — Leads, Accounts, Quotes, Orders, Invoices, Products, and Stock — with per-feature pricing at $28 per module per month and no publicly documented API surface. Odoo CRM is one module inside a broader ERP suite (Sales, Purchase, Inventory, Accounting, Project) that charges per user per app on its cloud tiers. The migration requires a pre-migration field audit because Black Ice describes each module as fully customisable, meaning standard field names and custom properties vary between deployments. We extract via Black Ice's application export utility, transform the dataset in dependency order (Accounts before Contacts, Orders before Invoices), and ingest into Odoo via its XML-RPC or JSON-RPC API depending on deployment type (Odoo.sh cloud vs. self-hosted). Workflows, automations, and picking list documents do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in Odoo's automation framework.
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 Black Ice CRM 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.
Black Ice CRM
Lead
Odoo CRM
crm.lead
1:1Black Ice Leads map to Odoo CRM Lead (the crm.lead model before conversion). The source lead fields vary by deployment due to Black Ice's customisable module model, so we conduct a pre-migration field audit via a sample export to document the actual schema. We map standard fields (name, email, phone, company_name) directly and flag any custom fields for explicit Odoo custom field creation with __c suffix before import. Black Ice potential tracking status maps to Odoo's lead_stage_id.
Black Ice CRM
Account
Odoo CRM
res.partner (company type)
1:1Black Ice Accounts (company records) map to Odoo res.partner records with partner_type set to 'company'. We preserve the company name, address, website, and any associated notes. The res.partner record is created first so that child Contact records can reference it as parent_id during import.
Black Ice CRM
Contact
Odoo CRM
res.partner (individual type)
1:1Black Ice Contacts map to Odoo res.partner records with partner_type set to 'individual', linked to their parent Account via parent_id. Email, phone, job title, and custom fields migrate. The contact-to-account relationship is preserved by resolving the Black Ice account association at import time against the res.partner parent record.
Black Ice CRM
Potential / Pipeline
Odoo CRM
crm.lead (after conversion) or crm.lead (unconverted)
1:1Black Ice Potential Tracking records represent deal-stage opportunities. We map these to Odoo crm.lead records with type='opportunity'. The stage name from Black Ice maps to Odoo's stage_id within the designated pipeline, and the estimated value maps to Odoo's planned_revenue field. We configure Odoo's CRM pipeline stages before migration to match the Black Ice stage names.
Black Ice CRM
Quote
Odoo CRM
sale.order (quotation state)
1:1Black Ice Quotes map to Odoo sale.order records in draft/quotation state. Quote header fields (customer, date, validity) map to their Odoo equivalents. Line items migrate as sale.order.line records with product_id, product_uom_qty, price_unit, and discount preserved. Product codes from Black Ice are resolved to Odoo product.product records via product.code or barcode lookup.
Black Ice CRM
Order
Odoo CRM
sale.order (sales order state)
1:1Black Ice Orders (derived from accepted Quotes) map to Odoo sale.order records in confirmed or done state. Order-to-account and order-to-contact relationships carry forward. In Black Ice, orders trigger automatic stock reduction; in Odoo, this is handled by the Inventory app's picking generation on order confirmation, which the customer configures post-migration.
Black Ice CRM
Invoice
Odoo CRM
account.move (customer invoice)
1:1Black Ice Invoices map to Odoo account.move records with move_type='out_invoice'. Invoice lines migrate as account.move.line with account_id resolved to the customer's receivable account. Payment status and due dates carry forward. The invoice-to-order relationship is preserved via the Odoo sale_order_id link on the account.move if the customer enables the Odoo Sales-Accounting integration.
Black Ice CRM
Product
Odoo CRM
product.product
1:1Black Ice Products map to Odoo product.product records. We migrate product name, SKU (product.default_code), list_price, standard_price, and product type (stockable vs. consumable vs. service). Product categories from Black Ice map to Odoo product.category. If Black Ice stores product images, we extract and attach them to product.product records via Odoo's binary field.
Black Ice CRM
Stock / Inventory
Odoo CRM
stock.quant
1:1Black Ice stock levels migrate to Odoo stock.quant records. Current on-hand quantity per product per location maps to stock.quant's quantity field. Reorder thresholds migrate to Odoo's product.stock.route or product.template's reordering rules if the customer configures Odoo's automated procurement. We extract stock as a point-in-time snapshot; live inventory reconciliation requires post-migration processes.
Black Ice CRM
Picking List (derived data)
Odoo CRM
stock.picking
lossyBlack Ice picking lists are application-generated documents derived from stock movements and order triggers. The primary records are the stock quants (migrated above). We document the existence of picking lists in the migration handoff and advise the customer that Odoo's Inventory app generates equivalent picking documents from confirmed sale orders. If the customer requires picking list templates as reference documents, we include them as attachments on the relevant sale.order records.
Black Ice CRM
Custom Fields
Odoo CRM
ir.model.fields (custom)
lossyBlack Ice CRM custom fields per module migrate to Odoo custom fields created via Settings > Technical > Models > Fields before data import. We apply Odoo's __c suffix convention and map field types (text to char/text, number to float/integer, date to date). The pre-migration field audit is critical here because Black Ice's customisable nature means no two deployments have identical schemas.
Black Ice CRM
Order-to-Invoice Relationship
Odoo CRM
sale.order to account.move link
lossyBlack Ice stores invoice-to-order lineage. In Odoo, this link is established by enabling the Sale > Configuration > Settings > Set lock setting for sale orders after invoicing, or by linking account.move records to sale.order via the Odoo Sales-Accounting integration. We configure this relationship during the Odoo setup phase and verify during the staging migration.
| Black Ice CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Account | res.partner (company type)1:1 | Fully supported | |
| Contact | res.partner (individual type)1:1 | Fully supported | |
| Potential / Pipeline | crm.lead (after conversion) or crm.lead (unconverted)1:1 | Fully supported | |
| Quote | sale.order (quotation state)1:1 | Fully supported | |
| Order | sale.order (sales order state)1:1 | Fully supported | |
| Invoice | account.move (customer invoice)1:1 | Fully supported | |
| Product | product.product1:1 | Fully supported | |
| Stock / Inventory | stock.quant1:1 | Mapping required | |
| Picking List (derived data) | stock.pickinglossy | Fully supported | |
| Custom Fields | ir.model.fields (custom)lossy | Mapping required | |
| Order-to-Invoice Relationship | sale.order to account.move linklossy | 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.
Black Ice CRM gotchas
Per-feature pricing obscures true migration scope
No publicly documented API schema or rate limits
Fully customisable modules create unpredictable schema
Picking list and stock alert data may not export cleanly
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 export method confirmation
We audit the customer's Black Ice CRM instance to identify all active modules (Leads, Accounts, Quotes, Orders, Invoices, Products, Stock, etc.) and request a sample export to document the actual field schema. We confirm whether the export will be CSV, Excel, or a database backup. We also identify the target Odoo deployment type (Odoo.sh cloud, Odoo Online, or self-hosted Community) and which Odoo apps will be active (CRM, Sales, Inventory, Accounting), because this determines the destination schema scope. The discovery output is a written migration scope with object list, estimated record counts, and a confirmed export method.
Pre-migration field audit and schema design
We analyze the Black Ice sample export to build the full field inventory. Standard fields map directly to Odoo equivalents. Custom fields are flagged for Odoo custom field creation (via Settings > Technical > Models > Fields) with appropriate types before data import begins. We configure Odoo CRM pipeline stages to match Black Ice stage names, configure sale.order record types if needed, and set up the stock warehouse in the Inventory app. This step prevents import failures caused by missing destination fields.
Staging migration and reconciliation
We run a full migration into a staging Odoo environment (a separate Odoo database or Odoo.sh test branch) using production-like data volume. The customer reviews the migrated records in Odoo, spot-checks field mapping accuracy on 25-50 records per object, and validates the pipeline stage assignment. We resolve any mapping errors and re-run the staging migration until reconciliation passes. This step validates the entire pipeline before any production data is touched.
Record migration in dependency order
We execute production migration in dependency order: first res.partner (Accounts/Companies), then res.partner (individual Contacts with parent_id resolved), then product.product (Products), then crm.lead (Leads and Opportunities), then sale.order (Quotes and Orders), then account.move (Invoices), then stock.quant (Inventory snapshot). Each phase emits a row-count reconciliation report comparing source export counts to destination insert counts before the next phase begins.
Cutover and configuration handoff
We freeze Black Ice writes during cutover, run a final delta migration of any records created or modified during the migration window, and enable Odoo as the system of record. We deliver the written automation inventory document listing Black Ice configuration points that have automation implications for Odoo admin review. We support a one-week hypercare window for reconciliation issues. We do not rebuild Black Ice configurations as Odoo automations inside the standard migration scope; that is a separate engagement.
Platform deep dives
Black Ice CRM
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 Black Ice CRM 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
Black Ice CRM: Not publicly documented.
Data volume sensitivity
Black Ice CRM 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 Black Ice CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Black Ice CRM 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 Black Ice CRM
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.