CRM migration
Field-level mapping, validation, and rollback between Sanoflow and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Sanoflow
Source
Odoo CRM
Destination
Compatibility
8 of 13
objects map 1:1 between Sanoflow and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Sanoflow to Odoo CRM is a platform-class migration that also involves restructuring around Odoo's ERP-integrated data model. Sanoflow organises customer interactions around Enquiries and Channels feeding a shared Inbox; Odoo CRM uses the crm.lead model for inbound prospects and res.partner for the contact-company hierarchy. We resolve the Enquiry-to-Lead split during scoping, map Sanoflow Custom Fields to Odoo ir.model.fields, and preserve Pipeline stage order as Odoo stage sequences. WhatsApp message templates cannot transfer between Meta Business accounts — we document all active template content for the customer's admin to re-submit post-migration. Sanoflow Flows and automation logic have no documented export endpoint, so we deliver a written Workflow Specification Document describing every trigger, step, and action for manual recreation in Odoo Studio or automated actions. Channel credentials (WhatsApp Business API tokens) are destination-specific and cannot migrate; the customer provisions new channels in Odoo WhatsApp integration post-migration.
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 Sanoflow 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.
Sanoflow
Contact
Odoo CRM
res.partner
1:1Sanoflow Contact records map to Odoo res.partner. The contact's name, phone, email, and custom field values migrate directly. Sanoflow does not have a separate Account/Company object — contacts store company affiliation as a text field or custom field. We create res.partner records for each company name encountered in contacts and link individual contacts as children of the parent partner record using partner_id. Owner assignment (hubspot_owner equivalent) maps to Odoo user_id on res.partner.
Sanoflow
Enquiry
Odoo CRM
crm.lead
1:1Sanoflow Enquiry records map to Odoo crm.lead. The enquiry body, source channel, status, and assigned agent migrate. Enquiry custom fields map to crm.lead custom fields created in Odoo Studio before migration. The Sanoflow channel source (WhatsApp, Instagram, Messenger, TikTok) is preserved as a tag on the crm.lead for reporting. Enquiry Forms submitted with no existing Contact create crm.lead records with the contact_name field populated from the form submission.
Sanoflow
Pipeline
Odoo CRM
crm.stage (per team)
lossySanoflow Pipelines map to Odoo stage sequences within crm.lead. Each Sanoflow Pipeline name becomes an Odoo Sales Team (crm.team) with its own stage sequence. Stage order and names migrate 1:1. Stage-specific automation rules (Sanoflow stage-entry triggers) are flagged in the Workflow Specification Document for manual rebuild in Odoo automated actions or Studio.
Sanoflow
Pipeline Stage
Odoo CRM
crm.stage
1:1Sanoflow pipeline stages map directly to Odoo crm.stage records. Stage names, sequence order, and is_won/is_lost flags migrate. Probability percentages from Sanoflow map to Odoo stage on_change_mapping probability values. Stage-specific assignees and routing rules are documented in the Workflow Specification Document.
Sanoflow
Channel
Odoo CRM
crm.tag (channel tracking)
lossySanoflow Channels (WhatsApp, Instagram, Messenger, TikTok) cannot be migrated as live channel credentials — WhatsApp Business API tokens are destination-specific and tied to the Sanoflow Meta Business account. We document each active Channel name and type as a crm.tag with tag_name prefixed by 'channel_' (e.g., channel_whatsapp, channel_instagram) so the customer can filter lead sources by channel in Odoo reporting. Channel reconnection happens post-migration in Odoo WhatsApp integration settings.
Sanoflow
Custom Fields (Contact)
Odoo CRM
Custom Fields (res.partner)
1:1Sanoflow Custom Fields on Contacts (text, number, date, choice) at Growth tier and above migrate to Odoo custom fields on res.partner created via Odoo Studio before migration. Choice-field options map to selection fields or many2one relations depending on option count. Field labels and help text are preserved. We verify field types are compatible with Odoo's allowed field types before migration.
Sanoflow
Custom Fields (Enquiry)
Odoo CRM
Custom Fields (crm.lead)
1:1Sanoflow Custom Fields on Enquiries migrate to Odoo custom fields on crm.lead. Date and datetime fields are validated against Odoo's datetime format before import. Choice fields with more than 40 options are mapped to many2one relations to avoid Odoo's selection field length limits.
Sanoflow
Flows
Odoo CRM
Automated Actions / Server Actions
lossySanoflow Flows have no documented export endpoint. We cannot migrate Flows as code. We extract Flow metadata during scoping — name, trigger type, step count, and action types — and document every Flow in a Workflow Specification Document. The customer rebuilds flows in Odoo Automated Actions (triggered on crm.lead write/create), Server Actions, or Odoo Studio. Flow rebuild is outside migration scope and is handled by the customer's admin or an Odoo implementation partner.
Sanoflow
Teams and Custom Roles
Odoo CRM
crm.team
1:1Sanoflow Teams and role assignments migrate to Odoo crm.team records. Team members map to crm.team member records linked to Odoo res.users. Sanoflow role names are preserved as tags on crm.team for reference. Permission granularity differences between Sanoflow and Odoo are documented — Sanoflow's per-Enquiry visibility rules may require simplification in Odoo based on the customer's chosen security model (record rules per team vs. global access).
Sanoflow
Enquiry Forms
Odoo CRM
Website Form (website.form) + crm.lead
lossySanoflow Enquiry Forms cannot migrate as live web forms because they are tied to Sanoflow's frontend infrastructure. We document form field definitions, routing rules (which Flow a submission triggers), and field-to-Enquiry field mappings in a Form Specification Document. The customer rebuilds forms in Odoo's Website Form Builder or as custom website controllers. Form routing rules become Odoo Automated Action triggers on crm.lead creation.
Sanoflow
WhatsApp Broadcasts and Campaigns
Odoo CRM
Mail Template (mail.template) + crm.lead tags
1:1WhatsApp campaign records (audience segments, message template content, send history metadata) migrate as documentation. Actual WhatsApp message template content is preserved in a text inventory for re-submission to Meta. The template approval status does not carry over — Meta requires fresh template approval in the new WhatsApp Business account. Odoo WhatsApp integration uses mail.template with wa.template model; we document the target template structure so the customer's admin creates the replacement templates post-migration.
Sanoflow
Webhooks
Odoo CRM
Webhook endpoint configuration
lossySanoflow Webhooks are Premium and Enterprise tier only and point to Sanoflow-specific destination URLs. Webhook endpoints cannot transfer between platforms. We document active webhook configurations (URL, event triggers, payload structure) in the Integration Specification Document. The customer recreates webhook endpoints in Odoo's Webhook module (Enterprise) or via custom ir.model.records with the out.wa webhook model.
Sanoflow
Owner (agent)
Odoo CRM
res.users
1:1Sanoflow Owners (agents assigned to Enquiries) map to Odoo res.users by email match. Any Sanoflow Owner without a matching Odoo User goes to a reconciliation queue. The customer's Odoo admin provisions missing users before record import begins. Owner-less Sanoflow records (unassigned Enquiries) are held in a default Odoo team for manual reassignment post-migration.
| Sanoflow | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Enquiry | crm.lead1:1 | Fully supported | |
| Pipeline | crm.stage (per team)lossy | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Channel | crm.tag (channel tracking)lossy | Fully supported | |
| Custom Fields (Contact) | Custom Fields (res.partner)1:1 | Fully supported | |
| Custom Fields (Enquiry) | Custom Fields (crm.lead)1:1 | Fully supported | |
| Flows | Automated Actions / Server Actionslossy | Mapping required | |
| Teams and Custom Roles | crm.team1:1 | Mapping required | |
| Enquiry Forms | Website Form (website.form) + crm.leadlossy | Mapping required | |
| WhatsApp Broadcasts and Campaigns | Mail Template (mail.template) + crm.lead tags1:1 | Mapping required | |
| Webhooks | Webhook endpoint configurationlossy | Not supported | |
| Owner (agent) | res.users1: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.
Sanoflow gotchas
WhatsApp API conversation charges are not included in subscription price
Flow automation has no documented export or API access
Channel and Pipeline limits per plan are enforced, not soft
WhatsApp message templates do not transfer between Meta Business accounts
No public review presence makes quality verification difficult
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 audit
We audit the Sanoflow account across all tiers (Starter, Growth, Premium, Enterprise), enumerating Contacts, Enquiries, Pipelines, Channels, active Flows, Custom Fields, Teams, Enquiry Forms, and Webhook configurations. We run export attempts on every object with available extraction methods and document any objects that cannot be reached automatically. We count active WhatsApp message templates, estimate conversation volume for Meta billing awareness, and assess whether the customer is on a Sanoflow plan that gates any migration-relevant objects.
Odoo schema provisioning
We provision the Odoo environment for migration. For Odoo Online (SaaS), we work in the customer's staging or production database. For Odoo Community self-hosted, we validate XML-RPC access and test connection credentials. We create all required custom fields on res.partner and crm.lead using Odoo Studio or direct model inheritance, configure Sales Teams (one per Sanoflow Pipeline), set up stage sequences matching Sanoflow stage order, and create crm.tag records for channel tracking. Schema is validated in a sandbox environment before any data moves.
Workflow Specification Document delivery
We deliver the Workflow Specification Document covering every active Sanoflow Flow: trigger type (event-based, time-based, form-submission), step sequence, message content, variable placeholders, and action types (assign, tag, notify, route). We also deliver an Integration Specification Document covering active Webhooks (URL, event type, payload structure) and Enquiry Form routing rules. These documents are the handoff artifacts for the customer's admin or Odoo implementation partner to rebuild automations post-migration.
Data cleansing and preparation
We run data quality checks on extracted Sanoflow data: duplicate Contacts by email and phone, malformed email addresses, missing required fields (name, phone) on Contact and Enquiry records, and choice field values that exceed Odoo's selection field limits. We normalise phone number formats to E.164 and standardise address fields to Odoo's address model. Stale Enquiry records (closed or archived more than 24 months ago) are flagged for archival rather than migration unless the customer specifies otherwise.
Staging migration and reconciliation
We run a full migration into the Odoo staging environment using production-like data volume. The customer's Odoo admin reconciles record counts (partners in, leads in, stage distribution, custom field values), spot-checks 25-50 random records against the Sanoflow source, and validates that tag assignments, team memberships, and owner assignments are correct. Any field mapping corrections, custom field type adjustments, or choice-field re-architecture happen here before production migration begins.
Production migration and cutover
We freeze Sanoflow writes during the cutover window, run a final delta migration of any records modified during staging sign-off, then enable Odoo as the system of record. We deliver the WhatsApp Template Inventory for Meta re-submission and the Automation Rebuild Tracker for Odoo admin progress. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. Channel reconnection (WhatsApp Business API provisioning in Odoo) and Flow rebuild remain with the customer's admin as post-migration configuration items.
Platform deep dives
Sanoflow
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 Sanoflow 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
Sanoflow: Not publicly documented.
Data volume sensitivity
Sanoflow 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 Sanoflow to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Sanoflow 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 Sanoflow
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.