CRM migration
Field-level mapping, validation, and rollback between Wavity CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Wavity CRM
Source
Odoo CRM
Destination
Compatibility
10 of 13
objects map 1:1 between Wavity CRM and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Wavity CRM to Odoo CRM is a platform consolidation as much as a data migration. Wavity stores Contacts, Accounts, Leads, Opportunities, and Help Desk Tickets in a unified interface with zero-code custom forms built in its application designer; Odoo models the same data across its crm.lead, res.partner, crm.team, and helpdesk modules with a REST and XML-RPC API surface. The primary technical challenge on the Wavity side is the absence of a documented bulk export endpoint, which means migrations must request CSV extracts from Wavity support and normalize them before loading into Odoo. Custom objects built with Wavity's Zero Code Application Designer have no standard schema, so we run a mandatory schema discovery call before writing a single record to Odoo. We migrate Opportunities as crm.lead records in Odoo's sales pipeline, preserve activity history as mail.message records, and map Wavity's ticket conversation threads to helpdesk.ticket messages. We do not migrate wBot RPA workflows or Wavity's pre-built analytics dashboards; we deliver written inventories of these for the customer's admin to rebuild in Odoo's studio and automation tools.
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 Wavity 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.
Wavity CRM
Contact
Odoo CRM
res.partner (Contact type)
1:1Wavity Contact records map directly to Odoo res.partner with partner_type='contact'. Standard fields (name, email, phone, mobile) migrate 1:1. Custom fields on Wavity Contact are identified during schema discovery and created as ir.model.fields in Odoo before import. The Wavity Contact-to-Company relationship (linked via the Company field on Contact) maps to partner_id on res.partner for child contacts. We set type='contact' and parent_id to the mapped Company partner record.
Wavity CRM
Account (Company)
Odoo CRM
res.partner (Company type)
1:1Wavity Company/Account records map to Odoo res.partner with partner_type='company'. The company flag is set to True. Website, street, city, country, industry, and revenue fields map to Odoo standard fields. Account is created before Contact import so that the parent_id foreign key is satisfied at Contact insert time. We use the domain or company name as the dedupe key during import to prevent duplicate Account records.
Wavity CRM
Lead
Odoo CRM
crm.lead
1:1Wavity Lead records map to Odoo crm.lead with type='lead'. Lead status, source attribution, and scoring values from Wavity custom fields migrate to Odoo stage_id, source_id, and priority. The lead_name field maps to Odoo's contact_name. We flag any Wavity Lead that has a closed-won status to be migrated as a crm.lead that will be manually converted to an Opportunity by the customer's admin post-migration, since automated lead-to-opportunity conversion is an Odoo workflow decision.
Wavity CRM
Opportunity
Odoo CRM
crm.lead (Opportunity type)
1:1Wavity Opportunity records map to Odoo crm.lead with type='opportunity'. Deal value migrates to planned_revenue; stage name maps to stage_id by lookup; probability migrates to probability as an override if the customer wants manual probability control rather than stage-based defaults. Owner/assigned user maps via email resolution to Odoo res.users. The linked Account (Company) resolves to the mapped res.partner id before Opportunity insert.
Wavity CRM
Pipeline
Odoo CRM
crm.stage + crm.team
lossyWavity's customizable pipeline stages (name, order, probability) map to Odoo crm.stage records scoped to crm.team via team_id. Each Wavity pipeline becomes an Odoo crm.team with its own stage sequence. We extract the full stage schema during discovery and create stages in order before any Opportunity records are imported. Stage probability percentages transfer as Odoo probability values; the customer chooses at scoping whether to use stage-based or manual probability.
Wavity CRM
Task
Odoo CRM
project.task
1:1Wavity Tasks with due dates, assignees, and linked Contacts or Opportunities map to Odoo project.task (type='task'). Linked Opportunities resolve to crm.lead ids. Assignee maps by email to res.users. For tasks without a project association in Wavity, we create a default migration project in Odoo to host them. Completion status, priority, and description migrate as Task fields.
Wavity CRM
Appointment
Odoo CRM
calendar.event
1:1Wavity Calendar Appointments map to Odoo calendar.event. Start datetime, end datetime, duration, location, and attendees transfer directly. Attendees resolve by email to res.partner records. For appointments linked to a Wavity Contact or Opportunity, we create calendar.event records with res.partner attendees and link via the event's opportunity_id or partner_id fields. Timezone handling is preserved to avoid scheduling offset errors.
Wavity CRM
Ticket (Help Desk)
Odoo CRM
helpdesk.ticket
1:1Wavity Help Desk Tickets migrate to Odoo helpdesk.ticket. Ticket subject, description, priority, status, and assignee map to Odoo standard fields. Wavity's ticket conversation thread (customer and agent messages) migrates as helpdesk.ticket.message_ids (mail.message records linked to the ticket). Attachments from the Wavity ticket attach to Odoo ir.attachment records linked via res_id/res_model to the ticket. Custom ticket fields identified during schema discovery are created in Odoo's helpdesk.ticket model before import.
Wavity CRM
Custom Object (Zero Code Designer)
Odoo CRM
Custom ir.model model
1:1Wavity custom objects built with the Zero Code Application Designer have no standard schema and no export format. We schedule a schema discovery session to document every custom object, field type, validation rule, and inter-object relationship before migration. Each custom object is then reimplemented as an Odoo ir.model inheriting from mail.thread, with all custom fields created as ir.model.fields before data import. Relationship fields between custom objects and standard objects (Contact, Account, Opportunity) are mapped as many2one or one2many Odoo fields. This is the highest-risk phase of any Wavity migration and requires customer validation before proceeding.
Wavity CRM
User / Team Member
Odoo CRM
res.users
1:1Wavity User records map to Odoo res.users by email match. We extract every distinct user referenced on Contacts, Opportunities, Tasks, and Tickets and reconcile them against the destination Odoo instance's user list. Inactive Wavity users are flagged to the customer's admin for decision (do not provision vs provision as inactive). Login and password are not migrated; Odoo sends a welcome email to each provisioned user at migration cutover. User roles and permissions are documented and handed off as a configuration guide for the customer's Odoo admin.
Wavity CRM
Document / Attachment
Odoo CRM
ir.attachment
1:1File attachments stored in Wavity are exported as binary files and re-uploaded to Odoo as ir.attachment records. The attachment-to-record linkage is preserved by storing the original Wavity record type and ID in ir.attachment.res_id and res_model fields so that each document remains associated with the correct Contact, Account, Opportunity, or Ticket. We normalize file names and deduplicate by content hash during ingestion.
Wavity CRM
Lead Scoring
Odoo CRM
crm.lead (custom fields)
lossyWavity's lead scoring values are stored as custom numeric or selection fields on the Lead object. These migrate as custom fields on crm.lead in Odoo. Odoo does not include a native lead scoring engine in the base CRM module, so the scoring values are preserved as data for the customer's admin to use in Odoo Studio reports or to integrate with a third-party scoring tool. We document the original scoring formula and field names for reference.
Wavity CRM
Reports / Dashboards
Odoo CRM
Not migrated
lossyWavity's pre-built sales dashboards and custom analytics built in the Zero Code Analytics Designer are not exportable in structured form. We do not migrate them. The underlying data (Contacts, Opportunities, Activities) is migrated so that equivalent reports can be rebuilt in Odoo using the Pivot, Graph, and Kanban views or Odoo Studio. We deliver a written inventory of every Wavity dashboard, its constituent charts, and the underlying data objects it references, so the customer's admin has a rebuild guide.
| Wavity CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (Contact type)1:1 | Fully supported | |
| Account (Company) | res.partner (Company type)1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Opportunity | crm.lead (Opportunity type)1:1 | Fully supported | |
| Pipeline | crm.stage + crm.teamlossy | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Appointment | calendar.event1:1 | Fully supported | |
| Ticket (Help Desk) | helpdesk.ticket1:1 | Fully supported | |
| Custom Object (Zero Code Designer) | Custom ir.model model1:1 | Fully supported | |
| User / Team Member | res.users1:1 | Fully supported | |
| Document / Attachment | ir.attachment1:1 | Fully supported | |
| Lead Scoring | crm.lead (custom fields)lossy | Fully supported | |
| Reports / Dashboards | Not migratedlossy | Not 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.
Wavity CRM gotchas
5-user minimum and annual billing lock-in on Professional tier
No publicly documented bulk export or bulk API
Custom objects from Zero Code Designer lack standard export format
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 data export coordination with Wavity
We audit the Wavity portal across all modules: Contacts, Accounts, Leads, Opportunities, Pipelines, Tasks, Appointments, Tickets, and any Zero Code custom objects. Because Wavity lacks a documented API, we coordinate directly with Wavity's sales and technical contacts to request structured CSV exports for each module. We document the exportable scope, identify any modules that require manual or support-assisted extraction, and build a normalization pipeline to convert Wavity CSV output into a clean, typed import format. The discovery output is a written migration scope, data export checklist, and a list of any Wavity modules that require alternative extraction methods.
Schema discovery for custom objects
For teams using Wavity's Zero Code Application Designer, we schedule a dedicated schema discovery session to document every custom object, field type (text, number, date, picklist, relationship), validation rule, and inter-object relationship. We map each Wavity custom object to an Odoo ir.model with equivalent fields and relationships. Custom objects inheriting from mail.thread gain the full Odoo chatter and messaging capability. This step is mandatory before any data import begins because Odoo's ORM requires the target model to exist before records can be inserted. The customer validates the reconstructed schema in a sandbox environment before we proceed to data migration.
Odoo configuration: teams, stages, and custom fields
We configure the destination Odoo CRM environment before any data loads. This includes creating crm.team records matching the Wavity pipeline structure, crm.stage records with the correct name, sequence, and probability per team, and any custom fields on crm.lead, res.partner, and helpdesk.ticket that correspond to Wavity custom fields. For the Help Desk module we configure ticket sequences, team assignment rules, and SLA policies if they were used in Wavity. All configuration is validated in an Odoo staging environment before production migration begins. We coordinate with the customer's Odoo admin to ensure the migration user has write access to all target models.
Sandbox migration and reconciliation
We run a full migration into an Odoo sandbox or development database using production-like data volume. The customer reconciles record counts across all objects (Contacts in, Accounts in, Leads in, Opportunities in, Tasks in, Tickets in, Custom Objects in), spot-checks 25-50 records against the Wavity source data, and validates that custom field values transferred correctly. Pipeline stage mappings, owner assignments, and attachment linkages are verified during this phase. Any mapping corrections are documented and applied to the production migration script. The customer signs off on the sandbox reconciliation before we schedule the production migration window.
Production migration in dependency order
We run production migration in record-dependency order: res.partner (Company type) first as the parent for all Contact and Opportunity records; res.partner (Contact type) second with parent_id resolved; crm.team and crm.stage configuration records; crm.lead (Lead and Opportunity type) with stage_id, partner_id, and user_id resolved; project.task for Tasks; calendar.event for Appointments; helpdesk.ticket with conversation threads migrated as mail.message records; ir.attachment for all linked files. Custom object records are loaded last because they may have foreign-key relationships to standard objects. Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC API with batch chunking and validation at each phase.
Cutover, validation, and automation handoff
We freeze writes in Wavity during the cutover window, run a final delta migration of any records modified during the migration run, then enable Odoo as the system of record. We validate record counts, attachment linkage, and custom field completeness against the Wavity source in a post-migration QA pass. We deliver the wBot automation inventory, the Wavity dashboard-to-Odoo report rebuild guide, and the custom object schema documentation to the customer's Odoo admin. We support a one-week hypercare window for reconciliation issues. We do not rebuild Wavity wBot automations as Odoo server actions or Studio workflows inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Wavity CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Wavity CRM and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Wavity CRM and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Wavity CRM and Odoo CRM.
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
Wavity CRM: Not publicly documented.
Data volume sensitivity
Wavity 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 Wavity CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Wavity 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 Wavity 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.