CRM migration
Field-level mapping, validation, and rollback between Maple CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Maple CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Maple CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Maple CRM to Odoo CRM is a vertical-to-horizontal migration: Maple CRM is purpose-built for immigration and visa process management with objects named and scoped to that domain, while Odoo CRM is one module inside a modular ERP suite that spans accounting, inventory, HR, and project management. The core migration challenge is semantic rather than technical — Maple's Cases, intake forms, and agreement templates carry immigration-specific data (process stages, passport data, jurisdiction-specific fields) that must map to Odoo's crm.lead, crm.lead.subtype, and custom fields without losing the process context. We sequence Client records first so that Case records can resolve the res.partner foreign key at insert time. We preserve historical case-stage timestamps as Odoo CRM stage-change notes. Workflow automations, SLA escalation rules, and agreement template definitions do not migrate via any standard API path — we document them for manual rebuild in Odoo's Studio or workflow builder.
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 Maple 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.
Maple CRM
Client
Odoo CRM
res.partner
1:1Maple CRM Client records (contact details, address, nationality, passport data) map to Odoo res.partner with is_company=False for individual clients and is_company=True for agency or corporate clients. The passport_data fields migrate as custom Char or Binary fields depending on whether the Odoo deployment uses Document module for attachment. Nationality maps to res.partner country_id via ISO code lookup. We treat res.partner as the parent entity and import it before Cases so that the partner_id foreign key resolves at insert time.
Maple CRM
Lead
Odoo CRM
crm.lead
1:1Maple CRM Lead records map to Odoo crm.lead (opportunity) with type='lead'. Source attribution (lead_source, assigned executive, follow-up dates) maps to crm.lead source_id, user_id, and date_deadline. Custom intake data fields (IRCC-specific intake form responses) migrate as crm.lead.x_studio_* custom fields if the Odoo deployment uses Studio to extend the model; otherwise they are mapped to the closest standard field and documented in the field mapping appendix.
Maple CRM
Case
Odoo CRM
crm.lead (type=opportunity)
1:1Maple CRM Case is the core immigration vertical object. Case stages (Application, Review, Submission, Approval, Denial/Appeal) map to crm.lead stage_id with Odoo stage names configured to match the customer's existing stage vocabulary. The Client link on Case maps to crm.lead.partner_id via the res.partner import. Historical stage-change timestamps are preserved as crm.lead description notes with a stage_change__c prefix so the full case history is reconstructable from the chatter log.
Maple CRM
Case Stage
Odoo CRM
crm.stage
lossyEach Maple CRM Case stage becomes an Odoo crm.stage record scoped to the CRM pipeline. Stage sequence order, probability percentages, and fold-on-kanban flags are configured in Odoo Studio or via CSV import of crm.stage. Denial/Appeal stages that exist in Maple CRM map to Odoo stage records with is_won=False so they appear correctly in pipeline reporting.
Maple CRM
Document
Odoo CRM
ir.attachment
1:1Maple CRM Document attachments (intake forms, passports, proof of funds, visa applications) migrate as ir.attachment records linked to the corresponding res.partner or crm.lead via res_model and res_id. Binary file content transfers via Odoo's XML-RPC /web/binary/upload_attachment endpoint with chunked base64 encoding for files over 1 MB. Document type metadata (document_kind, upload_date) maps to ir.attachment.description and a custom x_document_type picklist if the destination uses Document module.
Maple CRM
Quotation
Odoo CRM
sale.order
1:1Maple CRM Quotation Builder records map to Odoo sale.order with state='draft'. Line items, pricing, currency, and status migrate to sale.order.line records. The quotation-to-Client link maps to sale.order.partner_id. Quotation PDF output is not transferred; only the underlying data record is migrated so that Odoo can regenerate the PDF from the sale.order data.
Maple CRM
Invoice
Odoo CRM
account.move
1:1Maple CRM Invoice records map to Odoo account.move with move_type='out_invoice'. Line items, payment terms, outstanding balance, and invoice status migrate to account.move.line. If the customer migrates the Odoo Accounting module alongside CRM, we resolve the journal_id and move_type correctly. Historical paid invoices retain their payment_state and reconcile against the corresponding account.bank.statement.line if bank reconciliation data is included in scope.
Maple CRM
Agreement / AMC
Odoo CRM
account.analytic.account
1:1Maple CRM Contract and Annual Maintenance Contract records map to Odoo account.analytic.account for recurring billing contracts and to sale.subscription if the customer licenses Odoo Subscription management. Contract terms, renewal dates, and pricing migrate to the analytic account fields. Renewal scheduling requires manual reconfiguration in Odoo because renewal automation rules are not part of the contract data itself.
Maple CRM
Service Schedule
Odoo CRM
project.task or calendar.event
1:manyMaple CRM Service Schedules track appointment slots, milestones, and follow-up tasks tied to Cases. These split into Odoo project.task (for milestone tracking) and calendar.event (for scheduled appointments). We use the Case-Client relationship to route tasks to the correct crm.lead and res.partner. Recurring service schedules map to calendar.event series via rrule if the Odoo deployment uses the Calendar module.
Maple CRM
Support Request
Odoo CRM
helpdesk.ticket
1:1Maple CRM Support Request records migrate to Odoo helpdesk.ticket if the customer licenses the Odoo Helpdesk module. Ticket status, priority, assignee, and timestamps map to helpdesk.ticket stage_id, priority, user_id, and create_date. Support Request conversation history migrates as ticket.message_ids. SLA turnaround time rules and escalation logic are platform configuration and do not transfer — we document the existing SLA matrix so the customer can rebuild it in Odoo Helpdesk SLA rules.
Maple CRM
User / Staff
Odoo CRM
res.users
1:1Maple CRM user accounts with role-based access control map to Odoo res.users. We resolve by email match against the destination Odoo instance's user table. Staff records without HR data (Maple CRM has no HR module) are imported as res.users with the appropriate access rights set via res.groups membership. Any Maple CRM user without a matching Odoo user goes to a reconciliation queue for the customer admin to provision.
Maple CRM
Workflow Automation
Odoo CRM
ir.actions.server / base.automation
lossyMaple CRM workflow automation rules are platform configuration with no API export path. We do not migrate them. During discovery we document every active Maple CRM automation (trigger type, conditions, actions) and deliver a written automation inventory with recommended Odoo Studio equivalents: ir.actions.server for server-side automation, base.automation for ORM-triggered rules, and mail.activity for follow-up reminders. The customer admin or an Odoo partner rebuilds each automation post-migration.
| Maple CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Case | crm.lead (type=opportunity)1:1 | Fully supported | |
| Case Stage | crm.stagelossy | Fully supported | |
| Document | ir.attachment1:1 | Fully supported | |
| Quotation | sale.order1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| Agreement / AMC | account.analytic.account1:1 | Fully supported | |
| Service Schedule | project.task or calendar.event1:many | Fully supported | |
| Support Request | helpdesk.ticket1:1 | Fully supported | |
| User / Staff | res.users1:1 | Fully supported | |
| Workflow Automation | ir.actions.server / base.automationlossy | 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.
Maple CRM gotchas
Workflow automations have no migration path
Minimum 10-user license enforced at signup
Agreement templates are not API-exportable
Support Request SLA/TAT rules do not migrate
Intake form data is tightly coupled to immigration jurisdiction
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 Odoo edition assessment
We audit the source Maple CRM portal across tier, active workflow count, custom field inventory, Case volume, intake form field structure, and agreement template count. We assess the target Odoo deployment: Odoo Online ($24.90/user/month for CRM) versus Odoo Enterprise (per-app pricing with SLA support), and whether Odoo Accounting, HR, or Helpdesk are in scope alongside CRM. The discovery output is a written migration scope, object inventory, and Odoo edition recommendation. We also identify every active Maple CRM automation for the automation handoff document.
Schema design and Odoo field mapping
We design the destination schema in the Odoo database. This includes creating custom fields on crm.lead and res.partner via Odoo Studio (or directly in the database for on-premise deployments), configuring crm.stage records to match the customer's existing Case stage vocabulary, and setting up helpdesk.ticket stages if Support Request migration is in scope. Custom field names follow Odoo's x_studio_ or x_ prefix convention. For intake form fields with jurisdiction-specific validations, we map the field data type but note that jurisdiction labels and validations must be re-applied in Odoo Studio after migration.
Client and partner import with foreign-key resolution
We export all Maple CRM Client records and import them as Odoo res.partner via the XML-RPC /web/dataset/call_kw endpoint in dependency order. Individual clients (is_company=False) and agency clients (is_company=True) are classified during the export transform. The Odoo external_id generated for each res.partner is stored for use as the foreign key on Cases, Documents, Quotations, and Support Requests. Any Client records without an email or phone (common for intake forms started but not completed) are flagged in the reconciliation report for manual review.
Lead and Case migration with stage history
We migrate Maple CRM Leads to Odoo crm.lead with type='lead' and Cases to crm.lead with type='opportunity' using the res.partner external_id for partner_id resolution. Historical Case stage-change timestamps are appended to crm.lead description with a structured prefix so the timeline is readable in Odoo's chatter. For Cases with multiple linked Documents, we import ir.attachment records with res_model='crm.lead' and res_id pointing to the migrated opportunity ID. This step runs in batches of 500 records per XML-RPC call with exponential backoff on rate-limit responses.
Sales and financial record migration
We migrate Maple CRM Quotations to Odoo sale.order (draft state), Invoices to account.move, and Contracts/AMCs to account.analytic.account or sale.subscription. The partner_id, user_id, and line-item product references resolve via the IDs stored during earlier import steps. Invoice payment reconciliation requires that the Odoo Accounting module be active; if not, we deliver invoice records as standalone data without journal entries. Agreement template definitions are documented for manual rebuild rather than imported.
Support Request and automation handoff
We migrate Support Request records to helpdesk.ticket if the Helpdesk module is active. SLA rules and TAT escalation configurations are not migrated — we deliver a written SLA matrix document specifying threshold types (first response, next response, resolution), metric units, and recommended Odoo Helpdesk SLA policy settings. We deliver the automation inventory documenting every Maple CRM workflow with trigger, conditions, actions, and a recommended Odoo Studio or ir.actions.server equivalent. The customer's Odoo admin rebuilds SLA rules and automations post-migration as a separate workstream.
Cutover, delta migration, and post-migration validation
We freeze Maple CRM writes during cutover, run a delta migration of any records modified during the migration window, then mark Odoo as the system of record. We deliver a reconciliation report comparing record counts per object type, a sample validation of 25-50 randomly selected records against the Maple CRM source, and the automation and SLA handoff documents. We support a one-week hypercare window for data quality issues. We do not provide ongoing admin support, workflow rebuild, or training as standard scope — these are separate engagements.
Platform deep dives
Maple CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Maple CRM and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Maple CRM and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Maple 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
Maple CRM: Not publicly documented.
Data volume sensitivity
Maple 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 Maple CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Maple 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 Maple 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.