CRM migration
Field-level mapping, validation, and rollback between Wetroo and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Wetroo
Source
Odoo CRM
Destination
Compatibility
9 of 14
objects map 1:1 between Wetroo and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Wetroo to Odoo CRM is a migration from a messaging-first, WhatsApp-embedded CRM to a modular open-source ERP with an integrated CRM layer. Wetroo stores Leads and Deals as separate objects tied to WhatsApp conversation threads, while Odoo CRM uses a single crm.lead model where stages drive the lifecycle from unqualified prospect to closed-won opportunity. We resolve that structural difference during scoping, splitting Wetroo Lead and Deal records into Odoo crm.lead entries with appropriate stage assignments. Owner records from Wetroo map to Odoo Users, with team membership preserved as custom fields or Odoo Teams. WhatsApp conversation history is not extractable from Wetroo and must be retained separately in WhatsApp. Automation playbooks, WhatsApp sequences, and workflow triggers do not migrate 1:1; we deliver a written inventory of every playbook for the customer's admin to rebuild in Odoo Server Actions or Studio automations. Odoo CRM is available as a SaaS subscription or self-hosted deployment, with the CRM module priced per user on Odoo Online and Odoo.sh.
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 Wetroo 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.
Wetroo
Contact
Odoo CRM
res.partner
1:1Wetroo Contact records map directly to Odoo res.partner with partner_type set to 'contact'. The Wetroo name, phone (stored as mobile or phone), and email map to the corresponding Odoo partner fields. Custom fields on Wetroo Contact are created as ir.model.fields on res.partner before migration. We extract contacts via the Wetroo contact list API endpoints and insert via Odoo's XML-RPC or csv import, using email as the dedupe key where available.
Wetroo
Lead
Odoo CRM
crm.lead
1:1Wetroo Lead records map to Odoo crm.lead with type='lead'. The Wetroo lead_status, lead_source, and qualification_score migrate to crm_lead custom fields or Odoo's built-in priority and tag fields. We preserve the original Wetroo lead identifier in a custom field wetroo_lead_id__c for audit traceability. Leads without an email are stored with phone as the primary identifier in Odoo's phone index.
Wetroo
Deal
Odoo CRM
crm.lead
1:manyWetroo Deals map to Odoo crm.lead with type='opportunity'. The deal_value maps to Odoo's planned_revenue. The Wetroo deal stage maps to the corresponding Odoo crm.lead.stage_id entry by sequence order, not name match, because stage names are customer-defined. We compute the mapping during scoping by querying the stage sequence in Wetroo and matching by position to Odoo's stage list. The Wetroo deal owner maps to Odoo user_id on the crm.lead.
Wetroo
Pipeline
Odoo CRM
crm.lead.stage (per pipeline)
lossyWetroo pipelines map to separate stage sequences in Odoo crm.lead.stage. If Wetroo has multiple pipelines, we create multiple stage sequences by setting the pipeline_id on the stage records. Wetroo stage names and their WhatsApp workflow trigger associations are preserved as custom fields on the stage records in Odoo for the customer's admin to reference when rebuilding automations.
Wetroo
Pipeline Stages
Odoo CRM
crm.lead.stage
lossyWetroo stage sequence and names are customer-defined and tied to WhatsApp workflow triggers. We map stage order by sequence number, not by name, and set the probability percentage on each Odoo stage to match the original Wetroo stage probability where recorded. Any stages with no clear Odoo equivalent are flagged during scoping and mapped to a catch-all stage with a custom note.
Wetroo
Custom Fields
Odoo CRM
ir.model.fields
1:1Wetroo custom fields on Contact, Lead, and Deal are discovered via the API before migration. We create matching field definitions in Odoo using Studio (for no-code) or direct ir.model.fields XML-RPC creation, matching field types (char, selection, relational, text) to Odoo's field type system. Selection fields in Wetroo become selection fields in Odoo with the same option values. Relational fields (e.g., linking a Deal to a custom object) require the target custom object to be created first.
Wetroo
Users and Owners
Odoo CRM
res.users
1:1Wetroo owners (assigned to Deal and Lead) are extracted with name and email. We match by email against Odoo's res.users table. Any Wetroo owner without a matching Odoo User is placed in a reconciliation queue; the customer's Odoo admin provisions missing users before record migration resumes. Inactive Wetroo owners (departed team members) are mapped to inactive Odoo users with a flag field for admin review.
Wetroo
Teams
Odoo CRM
crm.team
1:1Wetroo team membership records are extracted as a relational export (owner + team name + member list). Odoo CRM Teams (crm.team) are created with the same team names. Member assignment maps to the crm.team member relation; individual members are linked via res.users membership. If Wetroo's per-owner model included sub-team hierarchies, we flatten them to a single team level in Odoo and flag the hierarchy for manual reorganization if needed.
Wetroo
Automation Sequences
Odoo CRM
Server Actions (reference document)
1:1Wetroo automation playbooks and WhatsApp-triggered sequences are JSON-configured workflows stored in Wetroo's system. We export playbook names, trigger conditions, action steps, and delay configurations as a structured reference document delivered alongside the migration. Odoo Server Actions and Automated Actions provide equivalent functionality, but the logic must be rebuilt by the customer's Odoo admin or an Odoo partner because trigger-event architectures differ between platforms.
Wetroo
WhatsApp Conversations
Odoo CRM
Not migratable
lossyWetroo stores WhatsApp conversation metadata and chat transcripts in WhatsApp's infrastructure, not in Wetroo's own database. No export mechanism exists for conversation history via the Wetroo API or any data dump. We extract and migrate all structured Contact, Lead, and Deal records that originated from conversations, but the conversation threads themselves remain in WhatsApp. We advise customers to export critical chat history directly from WhatsApp before the migration cutover date.
Wetroo
Deal Attachments
Odoo CRM
ir.attachment
1:1Wetroo supports file attachments on Deal records. We extract attachments by referencing the deal ID, download the files, and upload them to Odoo ir.attachment records linked to the corresponding crm.lead via res_model='crm.lead' and res_id set to the migrated opportunity ID. File names and MIME types are preserved. Attachments exceeding 10 MB are flagged for manual review if Odoo file storage limits apply.
Wetroo
Lead Status
Odoo CRM
crm.lead.tag or custom stage field
lossyWetroo's lead_status values (e.g., New, Contacted, Qualified, Lost) map to Odoo crm.lead.tag records as a tag set. If the customer uses a specific lead status taxonomy that exceeds what tags represent, we create a selection field lead_status__c on crm.lead and populate it during migration. The mapping is confirmed during scoping with the customer before any data transforms run.
Wetroo
Lead Qualification Score
Odoo CRM
crm.lead custom field
1:1Wetroo records a qualification_score on Lead records. We preserve this as a float field qualification_score__c on crm.lead, created as an ir.model.field before migration. If Odoo's CRM module has a built-in scoring model (available in Enterprise), the score migrates to the native scoring field; otherwise it remains as a custom field for reporting.
Wetroo
Deal Closed-Won / Closed-Lost Reason
Odoo CRM
crm.lead lost_reason_id
1:1Wetroo records closed_won and closed_lost flags and optionally a closed_reason text on Deal. In Odoo, type='opportunity' crm.lead records set probability=0 for Lost and probability=100 for Won, with lost_reason_id populated from a predefined selection list. We create a custom lost_reason selection field if Wetroo's reason vocabulary does not map to Odoo's default options.
| Wetroo | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Deal | crm.lead1:many | Fully supported | |
| Pipeline | crm.lead.stage (per pipeline)lossy | Fully supported | |
| Pipeline Stages | crm.lead.stagelossy | Mapping required | |
| Custom Fields | ir.model.fields1:1 | Mapping required | |
| Users and Owners | res.users1:1 | Mapping required | |
| Teams | crm.team1:1 | Mapping required | |
| Automation Sequences | Server Actions (reference document)1:1 | Mapping required | |
| WhatsApp Conversations | Not migratablelossy | Not supported | |
| Deal Attachments | ir.attachment1:1 | Fully supported | |
| Lead Status | crm.lead.tag or custom stage fieldlossy | Fully supported | |
| Lead Qualification Score | crm.lead custom field1:1 | Fully supported | |
| Deal Closed-Won / Closed-Lost Reason | crm.lead lost_reason_id1: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.
Wetroo gotchas
No documented public API rate limits or quota structure
WhatsApp conversation history is not exportable from Wetroo
Automation sequences do not transfer 1:1 to destination CRMs
Support SLA and escalation paths are undocumented
Pricing page uses INR; annual discounts are tiered inconsistently
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 scoping
We audit the Wetroo portal via API extraction and manual data sampling across Contacts, Leads, Deals, pipeline stages, custom fields, owner records, team memberships, and automation playbooks. We identify the full extent of custom field definitions, duplicate record prevalence, and any pipeline configurations that will require stage sequence mapping. The discovery output is a written migration scope document with object counts, custom field inventory, and a stage-mapping table. We also confirm the customer's Odoo edition and deployment method (Online,.sh, or self-hosted) during this phase.
Schema design in Odoo
We design the destination Odoo CRM schema before any data moves. This includes creating custom fields on res.partner and crm.lead via Odoo Studio or XML-RPC API calls, configuring crm.lead.stage records to match Wetroo's pipeline stage sequence (by position, not name), setting stage probability percentages, and creating crm.team records for each Wetroo team. Custom field types are matched to Odoo's field system: selection fields for enumerated values, many2one for relational lookups, char/text for free text. Schema is validated in an Odoo sandbox or test database before production migration begins.
Sandbox migration and reconciliation
We run a full migration into the customer's Odoo test environment using production-like data volumes. The customer's CRM admin reviews record counts (Partners in, Leads in, Opportunities in), spot-checks 20-30 records against the Wetroo source for field accuracy, and validates that stage mappings are correct. Any field mapping corrections, missing custom field definitions, or stage sequence adjustments are documented and applied before production migration begins. No production data is migrated until the sandbox sign-off is received.
Owner and team reconciliation
We extract every distinct Wetroo Owner (deal owner and lead owner) and match by email against Odoo's res.users table. Owners without a matching Odoo User are placed in a reconciliation queue. The customer's Odoo admin provisions any missing users as active or inactive depending on whether the person is still with the organization. Team membership is reconciled against crm.team records created in the schema design phase. Migration cannot proceed past record insertion until all OwnerId references are resolvable.
Production migration in dependency order
We migrate production data in the following dependency order: res.partner records first (no dependencies), then crm.team (team structure ready for crm.lead assignment), then crm.lead records as type='lead' (Wetroo Leads), then crm.lead records as type='opportunity' (Wetroo Deals) with OwnerId and team_id resolved. Custom field values are populated during each phase. Ir.attachment records are inserted after their parent crm.lead records are confirmed in Odoo. Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC API with batch chunking and error logging; large imports exceeding API timeout thresholds are retried with smaller batch sizes.
Cutover, validation, and automation handoff
We freeze Wetroo write access during the cutover window, run a final delta migration of any records created or modified during the migration period, then set Odoo CRM as the system of record. We deliver the automation playbook reference document (exported from Wetroo) to the customer's Odoo admin with step-by-step descriptions for rebuilding each sequence in Odoo Studio. We support a one-week hypercare window for reconciliation issues reported by the sales team. We do not rebuild Wetroo automations as Odoo Server Actions inside the migration scope; that is a separate engagement handled by the customer's admin or an Odoo partner.
Platform deep dives
Wetroo
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Wetroo and Odoo CRM.
Object compatibility
1 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
Wetroo: Not publicly documented.
Data volume sensitivity
Wetroo exposes a bulk API — large-volume migrations stream efficiently.
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 Wetroo to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Wetroo 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 Wetroo
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.