CRM migration
Field-level mapping, validation, and rollback between Legrand Cloud CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Legrand Cloud CRM
Source
Odoo CRM
Destination
Compatibility
10 of 13
objects map 1:1 between Legrand Cloud CRM and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Legrand Cloud CRM to Odoo CRM is a migration constrained by Legrand's lack of a public API on the Cloud tier. There is no REST endpoint for automated extraction, so we use Legrand's built-in Excel export pass per module, executed in dependency order: Accounts first, then Contacts, then Opportunities, then subordinate objects. Odoo CRM uses a unified crm.lead model that conflates Leads and Opportunities in a single table with a Stage field, which requires translating Legrand's separate Lead Inbox and Opportunities into Odoo's lead_type and stage_name fields. We preserve the original Legrand pipeline stage as a custom stage label in Odoo so the customer's sales team retains pipeline continuity. Add-on modules (Sales Quotes, Service Desk, Asset Tracking) map to Odoo sale.order, helpdesk.ticket, and maintenance.request respectively when those Odoo apps are active. We do not migrate workflows, automations, or sequence configurations; we deliver a written inventory for the customer's admin to rebuild using Odoo Studio and server actions.
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 Legrand Cloud 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.
Legrand Cloud CRM
Account
Odoo CRM
res.partner
1:1Legrand Account records map to Odoo res.partner with is_company = True. The company name, address fields, phone, website, and account type (Customer/Supplier/Partner) migrate directly. We use the Legrand AccountID as an external reference field (ref) in Odoo for traceability. parent_id is left null on Account records; child Contact records link to these Account partners via parent_id after the Account import completes. Legrand's account type values map to Odoo's partner_properties via a custom field or tag since Odoo does not have a native account_type comparable field.
Legrand Cloud CRM
Contact
Odoo CRM
res.partner
1:1Legrand Contact records map to Odoo res.partner with is_company = False and parent_id pointing to the Account partner created in the prior pass. Full name splits into firstname and lastname per Odoo's name_splitFields convention. Email, phone, mobile, job title, and role map to the corresponding Odoo partner fields. The Contact's parent Account reference is resolved by looking up the Legrand AccountID in the ref field we populated during the Account import pass. Any orphaned Contacts without a valid parent Account are held in a reconciliation queue for the customer to resolve.
Legrand Cloud CRM
Lead Inbox
Odoo CRM
crm.lead
1:manyLegrand Lead Inbox records (source=Lead) map to Odoo crm.lead with lead_type = lead. The Lead Inbox module captures name, email, phone, source, status, owner, and any custom lead fields. We map Legrand lead status values to Odoo stage names and preserve the original Legrand source value in a custom field x_legrand_source for reporting continuity. If the customer uses Legrand's lead scoring, that value migrates to a custom field x_legrand_lead_score on the crm.lead record.
Legrand Cloud CRM
Opportunity
Odoo CRM
crm.lead
1:1Legrand Opportunity records map to Odoo crm.lead with lead_type = opportunity. Expected close date, probability (as a percentage mapped to crm.lead probability), and deal value (expected_revenue) migrate directly. Stage names from Legrand's pipeline map to Odoo stage names, and we pre-create the pipeline stages in Odoo before migration so that stage_name references resolve at import time. Owner assignment migrates by email lookup against Odoo res.users.
Legrand Cloud CRM
Pipeline Stages
Odoo CRM
crm.stage
lossyEach named pipeline stage in Legrand's Opportunities module becomes a crm.stage record in Odoo CRM. Stage sequence order, probability percentages, and is_won/is_lost flags are configured in Odoo before any lead or opportunity data imports. The Legrand pipeline name becomes the Odoo crm.team or a tag on the crm.lead if the customer uses multiple pipelines. We pre-register all stage mappings in a staging configuration file that is applied to the Odoo database before the production migration pass.
Legrand Cloud CRM
Sales Quotes (Add-on)
Odoo CRM
sale.order
1:1Legrand Sales Quotes (Cloud or On-Premise add-on at $16/user) map to Odoo sale.order records when the Odoo Sale app is active. Quote header fields (customer reference, validity date, payment terms) migrate as sale.order fields. Line items migrate as sale.order.line records with product, quantity, and price. Conversion status (draft/sent/accepted/rejected) maps to Odoo state (draft/sent/sale/lost). The Quote-to-Order linkage is preserved as a note field since the Odoo quote-to-order conversion action is a UI operation that occurs post-migration in the customer's Odoo instance.
Legrand Cloud CRM
Service Desk Tickets (Add-on)
Odoo CRM
helpdesk.ticket
1:1Legrand Service Desk ticket records map to Odoo helpdesk.ticket when the Odoo Helpdesk app is active. Board assignment, ticket status, priority, age, and custom fields migrate directly. Linked Asset references from Legrand (if the Asset Tracking add-on is also active) map to maintenance.request records in Odoo with a ticket reference field. Note: Legrand's internal agent comments do not appear in the standard Excel export and require a separate comments report pass before migration cutover. We flag this as a supplemental data pass and treat it as a partial transfer, not a guaranteed 1:1.
Legrand Cloud CRM
Asset Tracking (Add-on)
Odoo CRM
maintenance.request
1:1Legrand Asset Tracking records map to Odoo maintenance.request when the Odoo Maintenance app is active. Serial number, linked customer (res.partner), and service history migrate as maintenance.request fields. Custom asset fields from Legrand map to custom fields on the maintenance.request model. The Asset-to-Ticket linkage is preserved as an x_legrand_asset_id text reference field since Odoo's Maintenance app does not natively link maintenance.requests to helpdesk.tickets without a custom field or module extension.
Legrand Cloud CRM
Campaign
Odoo CRM
utm.campaign
1:1Legrand Campaign records (name, type, status, target member count) map to Odoo utm.campaign. Campaign member associations export as a separate sheet from Legrand and merge into Odoo's utm.membership or a custom campaign member model depending on whether the customer licenses the Odoo Marketing app. If Marketing is not active, we create a custom campaign member table (x_campaign_member) with lead/partner reference and membership status.
Legrand Cloud CRM
Document
Odoo CRM
ir.attachment
1:1Legrand document files export as individual files per record rather than a contiguous folder archive. We script a bulk-rename pass to prefix each file with the parent record's Legrand ID (AccountID or ContactID) so that files can be associated to the correct res.partner or crm.lead during Odoo import. The folder hierarchy is not preserved by Legrand's export; we reconstruct it from document metadata where available. In Odoo, files attach to the parent record (res.partner or crm.lead) via ir.attachment with res_model and res_id fields set to the target model and record ID.
Legrand Cloud CRM
Activities (Email/Calendar)
Odoo CRM
mail.activity
1:1Legrand's Outlook and Gmail integration stores email threads and calendar entries that export as individual text files per activity rather than threaded conversations. We separate email bodies from attachments, ingest the email text as Odoo mail.message records linked to the res.partner or crm.lead, and attach files as ir.attachment. Calendar events migrate to mail.activity with activity_type_id set to the Odoo default Meeting type and ActivityDate matching the original Legrand timestamp. Meeting location and attendee list are stored as activity fields or custom fields since Odoo's native activity model does not include an attendee list without the calendar module.
Legrand Cloud CRM
Custom Fields
Odoo CRM
ir.model.fields
lossyLegrand custom fields per module (Accounts, Contacts, Opportunities, Lead Inbox) are audited during discovery. Each custom field is mapped to an Odoo ir.model.fields custom field on the corresponding model (res.partner or crm.lead). Field data type translation: Legrand text and textarea map to char or text; picklist maps to selection; date maps to date; number maps to float or integer; checkbox maps to boolean. We pre-create the custom field schema in Odoo before any data import so that the import pass includes the custom field columns. Custom field naming follows Odoo's x_ prefix convention for non-studio fields.
Legrand Cloud CRM
Owner
Odoo CRM
res.users
1:1Legrand Owner (user) records referenced on Account, Contact, Opportunity, and Ticket exports are resolved by email match against Odoo res.users in the destination database. Any Legrand Owner without a matching Odoo user is placed in a reconciliation queue for the customer's admin to provision before the production migration pass continues. Owner assignment on crm.lead migrates as user_id in Odoo. This step gates the Opportunity and Ticket import phases since user_id is required on those models.
| Legrand Cloud CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Account | res.partner1:1 | Fully supported | |
| Contact | res.partner1:1 | Fully supported | |
| Lead Inbox | crm.lead1:many | Fully supported | |
| Opportunity | crm.lead1:1 | Fully supported | |
| Pipeline Stages | crm.stagelossy | Fully supported | |
| Sales Quotes (Add-on) | sale.order1:1 | Fully supported | |
| Service Desk Tickets (Add-on) | helpdesk.ticket1:1 | Fully supported | |
| Asset Tracking (Add-on) | maintenance.request1:1 | Fully supported | |
| Campaign | utm.campaign1:1 | Fully supported | |
| Document | ir.attachment1:1 | Fully supported | |
| Activities (Email/Calendar) | mail.activity1:1 | Fully supported | |
| Custom Fields | ir.model.fieldslossy | Mapping required | |
| Owner | 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.
Legrand Cloud CRM gotchas
No public API for Cloud CRM migration automation
Storage and record tier limits gate import scope on Cloud Starter
Attachment and email exports are per-record, not bulk
On-Premise migration and implementation costs are excluded from the per-user license
Service Desk internal comments do not export via standard Excel export
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 source Legrand Cloud CRM portal across tier (Starter/Standard/Professional), active modules, custom fields per module, pipeline count, attachment volume, and active add-on usage (Quotes, Service Desk, Asset Tracking). We extract a full record count per module from Legrand's built-in export log and compare against the tier's storage and record limits to confirm the dataset fits within the current tier or identify which tier upgrade is needed. We produce a written migration scope document that lists every object, its record count, its export mechanism (standard Excel vs supplemental comments pass), and any tier-constraint flags.
Odoo configuration and stage design
We configure the destination Odoo CRM before any data arrives. This includes activating the CRM app and any required Odoo apps (Sale, Helpdesk, Maintenance) based on the migration scope, pre-creating pipeline stages that mirror Legrand's stage names and probabilities, designing the custom field schema on res.partner and crm.lead to receive Legrand's custom field data, and configuring the utm.campaign structure for any Campaign data. Configuration is deployed in an Odoo sandbox or development database for validation before production migration begins.
Export sequencing and bulk-rename scripting
We coordinate the Legrand export pass with the customer's admin, executing in dependency order: Accounts (with all fields), Contacts (with parent Account linkage preserved), Opportunities (with stage names), then Lead Inbox records, Quotes, Service Desk Tickets, Assets, and Campaigns. Attachment files are bulk-renamed with parent-record ID prefixes during a separate scripting pass. Internal Service Desk comments are extracted via a supplemental report. Each export pass produces a reconciliation row-count report that we compare against the discovery audit before proceeding.
Sandbox migration and mapping validation
We run a full migration into the Odoo sandbox database using production-equivalent record volumes. The customer's Odoo admin reconciles record counts (partners in, leads in, opportunities in, tickets in), spot-checks 25-50 records per object against the Legrand source for field accuracy and linkage integrity, and validates the pipeline stage assignments. Any field mapping corrections, stage name adjustments, or custom field schema changes happen in sandbox before the production migration begins. We do not proceed to production migration without a signed sandbox validation from the customer's admin.
Owner and user provisioning reconciliation
We extract every distinct Legrand Owner referenced on Accounts, Contacts, Opportunities, and Tickets and match by email against the Odoo res.users table. Any Legrand Owner without a matching Odoo User is placed in a reconciliation queue. The customer's Odoo admin provisions missing users and sets their access rights before the production migration pass. Owner resolution gates the Opportunity and Ticket import phases because user_id is a required field on crm.lead and helpdesk.ticket in Odoo.
Production migration in dependency order
We run the production migration in record-dependency order: res.partner (Accounts with is_company=True), res.partner (Contacts with parent_id resolved), crm.lead (Lead Inbox and Opportunities with stage_name and user_id resolved), sale.order (Quotes), helpdesk.ticket (Service Desk), maintenance.request (Assets), utm.campaign (Campaigns), ir.attachment (documents with bulk-rename applied), and mail.activity (email and calendar history). Each phase emits a row-count reconciliation report before the next phase begins. Incremental delta exports for records modified during the migration window are merged before cutover.
Cutover, validation, and automation rebuild handoff
We freeze Legrand write access during the cutover window, run a final delta pass for any records modified during migration, then mark Odoo as the system of record. We deliver a written inventory of every Legrand workflow, automation, and sequence configuration with Odoo Studio equivalents documented for the customer's admin to rebuild. We do not rebuild Legrand automations as Odoo server actions or automated actions within the migration scope; that work is handled by the customer's admin or an Odoo implementation partner. We provide a one-week hypercare window for reconciliation issues raised by the sales or service team.
Platform deep dives
Legrand Cloud CRM
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 Legrand Cloud CRM 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
Legrand Cloud CRM: Not publicly documented.
Data volume sensitivity
Legrand Cloud 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 Legrand Cloud CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Legrand Cloud 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 Legrand Cloud 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.