CRM migration
Field-level mapping, validation, and rollback between webCRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
webCRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between webCRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from webCRM to Odoo CRM is a multi-format extraction and transformation migration. webCRM has no public API; data exits through the manual Utilities > Overviews export utility or via the Zynk connector outputting Delivery XML. We guide customers through the Overviews export, transform nested Delivery XML into flat Order and Order Line records, and resolve Organisation-to-Company, Contact-to-Partner, and Deal-to-Opportunity mappings before loading into Odoo via its XML or CSV import channels. Custom fields from webCRM carry across as manually-created Odoo custom fields on the equivalent model. Automation rules stored inside webCRM's Automation Module are not accessible for export and do not migrate; we inventory every active automation so your admin can rebuild them in Odoo Studio post-go-live. webCRM Products migrate as Odoo Products with pricing and description preserved. Task history migrates as Odoo CRM activities attached to the correct Partner record.
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 webCRM 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.
webCRM
Organisation
Odoo CRM
res.partner (company type)
1:1webCRM Organisations map to Odoo res.partner records with partner_type = contact and company_type = company. We extract Organisation name, address, phone, website, and any Organisation-level custom fields and create them as Company Partner records in Odoo. The Organisation ID is preserved in a custom Char field webcrm_id for reference. Odoo's Contacts module must be installed to enable the res.partner model for CRM use; we confirm this during scoping.
webCRM
Contact
Odoo CRM
res.partner (individual type)
1:1webCRM Contacts map to Odoo res.partner records with partner_type = contact and company_type = person. We resolve the Organisation-to-Company lookup at import time by matching Organisation name or ID to the Odoo Company Partner created in the prior phase. Contact-level custom fields map to custom Char, Integer, or Selection fields on res.partner. Email, phone, and job title migrate directly.
webCRM
Deal
Odoo CRM
crm.lead (stage = Opportunity)
1:1webCRM Deals map to Odoo crm.lead records of type opportunity. The Deal name becomes the Opportunity name; deal value maps to Odoo's Expected Revenue (planned_revenue); pipeline stage names map to Odoo CRM Stage values in the configured Sales Pipeline. We flag any Deals with status that has no Odoo stage equivalent and create a custom stage or use Closed Lost during staging. Deal-to-Organisation and Deal-to-Contact associations resolve via the Partner and partner_id lookups after those records are imported.
webCRM
Deal Stage
Odoo CRM
crm.stage
lossyEach distinct webCRM pipeline stage value becomes an Odoo CRM Stage record in the sales team's pipeline. We create these stages during the Odoo configuration phase, mapping the original stage name and probability percentage. If webCRM uses multiple Deal pipelines, we create separate Odoo Sales Teams and assign the appropriate stage sets to each.
webCRM
Delivery
Odoo CRM
sale.order + sale.order.line
1:manywebCRM Deliveries are exported in webCRM Delivery XML format via Zynk. The nested XML with line-item detail is flattened into two records: sale.order (header: customer, order date, delivery address, delivery reference) and sale.order.line (product, quantity, unit price, tax). We parse the XML, extract parent Delivery attributes, and emit child Order Line rows, then load via Odoo's CSV import or XML-RPC API. webCRM Delivery status (dispatched, confirmed) maps to Odoo sale.order state.
webCRM
Product
Odoo CRM
product.product
1:1webCRM Product Database records (name, description, SKU, list price, cost price) map to Odoo product.product records. We create each webCRM product as an Odoo Product with type = product or service based on the product database flags. Standard price from webCRM becomes Odoo's list_price; cost from webCRM becomes standard_price. Product associations with Deals or Deliveries resolve after both objects exist in Odoo.
webCRM
Task
Odoo CRM
crm.lead.activity or mail.activity
1:1webCRM Tasks linked to Organisations or Contacts migrate as Odoo CRM activities attached to the relevant crm.lead (Opportunity) or res.partner record. Task subject becomes the activity title; task status (pending, completed) maps to activity state; due date migrates as deadline. Tasks without a parent Deal or Contact are attached to the nearest related Organisation or Contact record. Activity timeline ordering is preserved by setting create_date to the original webCRM task timestamp.
webCRM
Custom Fields
Odoo CRM
ir.model.fields (custom)
lossywebCRM custom fields on Organisations, Contacts, Deals, Deliveries, Products, and Tasks require manual creation in Odoo before data import. We extract the full custom field schema during scoping (field name, data type, options for picklists), create matching custom fields in Odoo via Settings > Technical > Database Structure > Fields, then import values as part of each object migration phase. Custom field types are matched to the closest Odoo field type: text fields to Char, numeric fields to Float or Integer, date fields to Date.
webCRM
Automation Rules
Odoo CRM
studio.automation (rebuild)
1:1webCRM Automation Module rules (time-based reminders, inactivity triggers, deadline actions) are stored internally with no export endpoint and cannot be migrated. We inventory every active webCRM automation during scoping, documenting its trigger, conditions, actions, and affected record types. This inventory is handed off as a written specification for the customer's Odoo admin or an Odoo partner to rebuild using Odoo Studio automation, server actions, or scheduled actions. Budget 1-2 hours per automation rule for rebuild.
webCRM
Owner
Odoo CRM
res.users
1:1webCRM Owners (sales reps assigned to Organisations, Contacts, Deals) map to Odoo res.users records. We extract distinct owner references from all migrating objects, match by email address against the Odoo destination User list, and flag any owners without a matching Odoo User for the customer's admin to provision before record import resumes. Owner assignment on Deals migrates as user_id on the crm.lead record.
webCRM
Order (webCRM Orders via Deliveries)
Odoo CRM
sale.order
1:1webCRM Order records linked to Deliveries are captured through the Delivery XML export. If webCRM maintains separate Order records distinct from Deliveries, we export those via the Overviews utility as CSV and map order number, order date, and customer reference to Odoo sale.order. The Delivery XML and Order CSV are cross-referenced to avoid duplicating records if both export paths produce the same data.
webCRM
Quote
Odoo CRM
sale.order (quotation state)
1:1webCRM quotes or proposals stored as distinct records from Orders export as Odoo sale.order with state = draft or sent. Quote line items map to sale.order.line. If webCRM quotes are stored within the Deal object (attached as a document reference rather than a structured record), we note the file location and recommend it be re-uploaded manually to the migrated Odoo Opportunity as an attachment post-migration.
| webCRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Organisation | res.partner (company type)1:1 | Fully supported | |
| Contact | res.partner (individual type)1:1 | Fully supported | |
| Deal | crm.lead (stage = Opportunity)1:1 | Fully supported | |
| Deal Stage | crm.stagelossy | Fully supported | |
| Delivery | sale.order + sale.order.line1:many | Fully supported | |
| Product | product.product1:1 | Fully supported | |
| Task | crm.lead.activity or mail.activity1:1 | Fully supported | |
| Custom Fields | ir.model.fields (custom)lossy | Mapping required | |
| Automation Rules | studio.automation (rebuild)1:1 | Not supported | |
| Owner | res.users1:1 | Fully supported | |
| Order (webCRM Orders via Deliveries) | sale.order1:1 | Fully supported | |
| Quote | sale.order (quotation state)1: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.
webCRM gotchas
Automation rules are not exported or migratable
Export requires manual Overviews navigation
Delivery XML format requires transformation
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
Scoping and Overviews export guidance
We conduct a scoping call to audit the webCRM instance: record counts per object (Organisations, Contacts, Deals, Deliveries, Products, Tasks), active automation rule count, custom field schema per object, and any Zynk connector configurations. We then guide the customer through the Utilities > Overviews export process, providing step-by-step instructions for each object type. We recommend running exports in a specific order (Organisations first, then Contacts, then Deals, then Products, then Deliveries) and cross-referencing record counts to confirm completeness before the transformation phase begins.
XML transformation and data mapping
We transform the webCRM Delivery XML from Zynk into a pair of CSV files: sale.order (header) and sale.order.line (line items). We cross-reference the Delivery XML with any standalone Order CSV exports to avoid duplicating records. We build the field mapping spreadsheet covering every webCRM field to its Odoo equivalent, including custom field creation specs. We flag any webCRM picklist values that do not have a matching Odoo option and propose a mapping or a custom Odoo selection value.
Odoo environment setup
We confirm the Odoo instance has the CRM module installed and review the existing Sales Pipeline stages. We create any missing CRM stages to match webCRM pipeline stage names, set probability percentages, and configure the Kanban view order. We then create all custom fields identified in the mapping spreadsheet via Odoo's Settings > Technical interface. We load Products first (as a lookup dependency for Order Lines) via CSV import, then prepare the Partner and Opportunity import templates.
Staging migration and reconciliation
We run a full migration into a test environment or a copy of the production Odoo database. We import in dependency order: Products (no dependencies), Companies (from Organisations), Contacts (with Company lookup resolved), Opportunities (with Contact and Company lookups resolved), Sales Orders (from Deliveries and Orders), then Tasks as activities. We validate row counts against the webCRM export totals and spot-check 25-50 records against the source. The customer reviews and approves the staging output before production migration is scheduled.
Production migration and cutover
We run production migration following the same dependency order as staging. Owner reconciliation (matching webCRM owners to Odoo users by email) is completed before Opportunity import since user_id is a required field on crm.lead. We run Deliveries and Orders last since they have the most dependencies (Products, Partners, and optionally Opportunities). Any records modified in webCRM during the migration window are delta-migrated after the initial load. We then freeze webCRM access, run a final delta pass, and hand over the production Odoo instance.
Automation inventory handoff and go-live support
We deliver the automation inventory document listing every active webCRM Automation Rule with its trigger, conditions, actions, and a recommended Odoo Studio equivalent. We support a one-week hypercare window resolving any data quality issues raised by the sales team during initial use. We do not rebuild webCRM automations as Odoo automations inside the migration scope; that work is handled by the customer's Odoo admin or a separate Odoo partner engagement.
Platform deep dives
webCRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 webCRM and Odoo CRM.
Object compatibility
3 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
webCRM: Not publicly documented.
Data volume sensitivity
webCRM 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 webCRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your webCRM 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 webCRM
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.