CRM migration
Field-level mapping, validation, and rollback between Mothernode and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Mothernode
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Mothernode and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Mothernode to Odoo CRM is a structural migration that requires resolving a fundamentally different data model. Mothernode separates Customers and Contacts as distinct entities organized around Departments, while Odoo CRM unifies person records under a single Partner model with address-book-style contacts. We separate Mothernode Customers into Odoo Partners (commercial entities) and Contacts (individuals), and map Mothernode Leads and Opportunities into Odoo CRM Leads and Opportunities with stage names reconciled against the Odoo pipeline configuration. Activity history (Notes and Events) migrates via the Odoo XML-RPC API with parent record lookups resolved at migration time. Mothernode's lack of a bulk export endpoint forces us to sequence paginated API reads, which extends extraction timelines for accounts with large record volumes. Workflows, email campaigns, follow-up sequences, and Project Folders do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or via custom development.
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 Mothernode 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.
Mothernode
Customer
Odoo CRM
res.partner (company type)
1:1Mothernode Customers map to Odoo res.partner records with partner_type set to 'company'. The customer_id becomes the partner_id for cross-referencing. Mothernode's department-level organization maps to Odoo's company structure (res.company) if the customer uses multi-company; otherwise department data is preserved in a custom field for segmentation. Customer billing and shipping addresses migrate as separate address records (partner addresses with type='invoice' and type='delivery').
Mothernode
Contact
Odoo CRM
res.partner (contact type)
1:manyMothernode Contacts map to Odoo res.partner records with partner_type set to 'contact' and a partner_id pointing to the parent Company Partner record created from the associated Mothernode Customer. We resolve the parent linkage at migration time using the customer_id reference in the Mothernode Contact record. Contact role or title migrates to res.partner.function. Phone and email fields map directly.
Mothernode
Lead
Odoo CRM
crm.lead (optional_type='lead')
1:1Mothernode Leads (distinguished from Opportunities by the record type indicator in the API response) map to Odoo crm.lead with optional_type='lead'. The Lead's email, phone, company_name, and description fields migrate directly. We set crm.lead.priority based on any priority field in the Mothernode record. Lead source information from Mothernode migrates to the crm.lead.source_id lookup if Odoo's CRM is configured with stages; otherwise it is preserved in a custom field.
Mothernode
Opportunity
Odoo CRM
crm.lead (optional_type='opportunity')
1:1Mothernode Opportunities map to Odoo crm.lead with optional_type='opportunity'. The Mothernode deal stage maps to an Odoo stage_id within a configured Odoo CRM pipeline. Probability is computed from the stage mapping or carried from Mothernode's stage probability if available. Expected revenue, partner_id (linked to the Customer), and user_id (owner) migrate directly. Closed-won and closed-lost reasons migrate to Odoo's lost_reason_id field if configured.
Mothernode
Pipeline Stage (Opportunity stage)
Odoo CRM
crm.stage
lossyMothernode Opportunity stages are extracted from the source data and mapped to Odoo crm.stage records within the target pipeline. We create stages in Odoo matching the source stage names and assign probability weights matching the source. If Mothernode uses multiple pipelines, we create separate crm.team records in Odoo and assign the relevant stages per team. Stage order is preserved by setting sequence values matching the source order.
Mothernode
Note
Odoo CRM
mail.message
1:1Mothernode Notes migrate to Odoo mail.message records with message_type='notification' linked to the parent crm.lead (for Opportunity Notes) or res.partner (for Contact Notes). Note body migrates as HTML content. Author attribution is resolved by matching the Mothernode author name or email to a res.users record; if no match is found, the note is attributed to the migration user. create_date and write_date timestamps are preserved from the source.
Mothernode
Event
Odoo CRM
calendar.event
1:1Mothernode Events migrate to Odoo calendar.event records. Start and end datetime, duration, location, and description fields migrate directly. Attendee links are resolved by matching the associated Contact or Opportunity to their migrated Odoo records, creating calendar.attendee entries for each. All-day event flags migrate to allday=True on the Odoo record. Recurrence data is not migrated; recurring events are imported as individual instances with a custom recurrence flag set.
Mothernode
Invoice
Odoo CRM
account.move
1:1Mothernode Invoices map to Odoo account.move records with move_type='out_invoice' for customer invoices. Line items, totals, tax amounts, and payment status migrate to the corresponding Odoo fields. The customer_id reference is resolved to the migrated res.partner record. Odoo requires the account.move records to belong to a specific company_id; if the customer uses Odoo multi-company, we assign the correct company during migration. Invoice PDF attachments migrate as ir.attachment records linked to the account.move.
Mothernode
User / Owner
Odoo CRM
res.users
1:1Mothernode owner_id references on Leads, Opportunities, and Events map to Odoo res.users by email match. We extract every distinct owner referenced in the source data and match against the Odoo destination's User table. Any Owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision before record import resumes, because OwnerId (user_id on crm.lead) is a required lookup for Opportunity migration.
Mothernode
Custom Field (on Contact, Customer, Lead, Opportunity)
Odoo CRM
ir.model.fields (custom)
lossyMothernode custom fields are not explicitly documented in the API reference. We probe the API response schema during the extraction phase to identify non-standard field names and infer their data types from values. We pre-create Odoo custom fields (ir.model.fields with track_visibility set to 'onchange') in the destination database before the main migration phase so that custom field values are populated during the data load rather than lost. Custom field migration happens in a pre-migration schema phase.
Mothernode
Project Folder
Odoo CRM
project.project
1:1Project Folders are a Mothernode Enterprise-tier feature with unconfirmed API availability. We probe the API during extraction; if endpoints return 403 or 404, we flag Project Folders as requiring manual UI export. For teams where Project Folders are critical, we map them to Odoo project.project records with the project type set to 'private' or 'task' as appropriate. Project-related data links to migrated Contacts and Opportunities via Odoo's project.task model with partner_id lookups.
Mothernode
Job Center / Job
Odoo CRM
mrp.production or project.task
1:1Job Center Modules are not covered in the Mothernode public API reference. We flag Job records as requiring manual export from the Mothernode UI and document the mapping to either Odoo mrp.production (for manufacturing jobs) or project.task (for service jobs) during the scoping call. The customer's Odoo administrator determines which model is appropriate based on their operational use of Job Center.
| Mothernode | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer | res.partner (company type)1:1 | Fully supported | |
| Contact | res.partner (contact type)1:many | Fully supported | |
| Lead | crm.lead (optional_type='lead')1:1 | Fully supported | |
| Opportunity | crm.lead (optional_type='opportunity')1:1 | Fully supported | |
| Pipeline Stage (Opportunity stage) | crm.stagelossy | Fully supported | |
| Note | mail.message1:1 | Fully supported | |
| Event | calendar.event1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| User / Owner | res.users1:1 | Fully supported | |
| Custom Field (on Contact, Customer, Lead, Opportunity) | ir.model.fields (custom)lossy | Fully supported | |
| Project Folder | project.project1:1 | Fully supported | |
| Job Center / Job | mrp.production or project.task1: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.
Mothernode gotchas
No bulk API forces sequential record reads
Enterprise-tier objects lack confirmed API coverage
HTTP Basic auth with no OAuth 2.0
Rate limits are not publicly documented
Lead vs. Opportunity distinction requires manual validation
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 API probe
We audit the source Mothernode account by running probe requests against each documented API endpoint (Customers, Contacts, Leads-and-Opportunities, Notes/Events, Invoices) using HTTP Basic authentication. We capture record counts, field names from the API response schema, and any non-standard custom field names. We test for Enterprise-tier endpoint availability (Project Folders, Job Center) by probing the same endpoints under the Enterprise credentials. The discovery output is a written extraction scope with record counts, field inventory, and a flag for any Enterprise objects with unconfirmed API coverage.
Odoo schema preparation and pipeline configuration
We configure the destination Odoo CRM before any data import. This includes creating crm.team records (one per Mothernode pipeline), creating crm.stage records with sequence numbers and probability values matching the source stage matrix, and provisioning any custom fields (ir.model.fields) identified during the API probe that are not in the standard Odoo schema. For Invoice migration, we also create or map the required account.journal and account.account records. Schema is deployed into the destination Odoo database via XML-RPC with the Odoo administrator credentials.
Customer-Contact split design and Partner hierarchy build
We design the Customer-to-Partner and Contact-to-Contact mapping table during the scoping call. Mothernode Customers become Odoo company-type res.partner records first, in a dedicated migration phase before any Contact records are written. We build the Partner ID lookup table from the Mothernode customer_id so that each Contact can be assigned its partner_id (parent company) at the moment of import. This dependency order is critical: company Partners must exist before Contact Partners can reference them.
Owner reconciliation and User provisioning
We extract every distinct owner_id referenced in Mothernode Leads, Opportunities, Notes, and Events and match by email against the Odoo destination's res.users table. Any Owner without a matching Odoo User goes to a reconciliation queue. The customer's Odoo administrator provisions missing users (active or inactive) before the production migration phase begins. Owner resolution is a prerequisite for Opportunity migration because user_id is a required field on crm.lead in Odoo.
Production migration in dependency order
We run production migration in record-dependency order: res.partner (company type, from Mothernode Customers), res.partner (contact type, from Mothernode Contacts with parent partner_id resolved), crm.lead (lead type, from Mothernode Leads), crm.lead (opportunity type, from Mothernode Opportunities with stage_id and user_id resolved), calendar.event (from Mothernode Events with attendee resolution), mail.message (from Mothernode Notes with parent record resolution), account.move (from Mothernode Invoices with journal_id and company_id assigned). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and Automation rebuild handoff
We freeze Mothernode writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver a written inventory of Mothernode email campaigns, follow-up sequences, and Project Folders that require manual rebuild in Odoo Studio or via custom development. We support a one-week hypercare window where we resolve any data quality issues raised by the customer's team. Workflows, automations, and email marketing sequences do not migrate as code within the standard migration scope.
Platform deep dives
Mothernode
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 Mothernode 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
Mothernode: Not publicly documented.
Data volume sensitivity
Mothernode 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 Mothernode to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Mothernode 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 Mothernode
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.