CRM migration
Field-level mapping, validation, and rollback between LeadSimple and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
LeadSimple
Source
Odoo CRM
Destination
Compatibility
14 of 14
objects map 1:1 between LeadSimple and Odoo CRM.
Complexity
BStandard
Timeline
24–72 hours
Overview
LeadSimple organizes sales around leads, pipelines, and property-centric processes — every lead carries property address, occupancy, number of units, and Annual Contract Value alongside standard contact fields. Odoo CRM models the same records as crm.lead (which becomes an Opportunity when qualified) and res.partner, with property data held as custom fields on the partner or related product record. The migration carries every LeadSimple lead, contact, pipeline stage, custom field, and task into Odoo, translating LeadSimple's Stage Name into a crm.stage record and Owner into an Odoo res.users lookup by email. Workflows and automated process rules (LeadSimple's Process feature) do not transfer — FlitStack exports those definitions as JSON for your Odoo admin to rebuild in Odoo's Studio or with server actions. The primary migration path uses the Odoo XML-RPC API; bulk imports via CSV handle cases where the destination plan restricts API calls. A 24–48 hour delta pickup window closes the gap on records modified between the migration run and go-live.
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 LeadSimple 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.
LeadSimple
Lead
Odoo CRM
crm.lead
1:1LeadSimple's lead record maps directly to Odoo's crm.lead model. The lead's core properties—name, contact details, address, and property information—translate to corresponding fields on the Odoo record. Odoo crm.lead can represent both a Lead (unqualified) and an Opportunity (qualified). The migration sets type='lead' initially; conversion to opportunity is handled separately in Odoo post-migration. The original LeadSimple record ID is preserved in a custom x_source_system_id field for traceability and delta-run matching.
LeadSimple
Contact (on Lead)
Odoo CRM
res.partner
1:1LeadSimple stores a contact name, email, phone, and address directly on the lead. These fields translate to Odoo's res.partner record — created as a standalone partner record first, then linked to crm.lead via partner_id. The lead-contact relationship is N:1 in Odoo (one partner can have many leads).
LeadSimple
Pipeline
Odoo CRM
crm.team
1:1LeadSimple's Pipeline name maps to an Odoo crm.team (sales team). Each crm.team in Odoo holds its own set of crm.stage records. If your LeadSimple setup has multiple pipelines with the same stage names, we create one crm.team per pipeline and scoped stage sets to avoid mixing deal records across teams.
LeadSimple
Stage Name
Odoo CRM
crm.stage
1:1LeadSimple Stage Name maps to Odoo crm.stage records within the corresponding crm.team. Stage sequence (order) is preserved via the sequence field. Odoo's stage records include probability and legend attributes that we set based on your LeadSimple stage-status values (Active / Won / Lost).
LeadSimple
Property Type
Odoo CRM
Custom field on res.partner (property_type)
1:1LeadSimple property type (Single Family, Multi-Family, Commercial, etc.) has no native Odoo equivalent in the CRM module. We create a custom selection field on res.partner named property_type before migration. Value-mapping is required: each LeadSimple property type becomes a matching selection option in the Odoo custom field.
LeadSimple
Occupancy
Odoo CRM
Custom field on res.partner (occupancy_status)
1:1LeadSimple tracks whether a property is Occupied or Vacant at the lead level. We create a custom selection field occupancy_status on res.partner in Odoo to hold this value. The field is optional — records without occupancy data leave the field blank.
LeadSimple
Number of Units
Odoo CRM
Custom field on res.partner (number_of_units)
1:1LeadSimple Number of Units is an integer stored against the lead's property record. Odoo CRM has no native units field — the concept of multi-unit properties doesn't exist in the standard CRM model. We create a custom integer field number_of_units on res.partner so the property portfolio context stays attached to the contact record. This preserves the property-specific unit count alongside the partner's address and contact information during the migration.
LeadSimple
Annual Contract Value / Cost
Odoo CRM
Custom fields on crm.lead (annual_contract_value / property_cost)
1:1LeadSimple carries both ACV (Annual Contract Value) and Cost as numeric fields. These map to Odoo crm.lead custom fields — annual_contract_value__c and property_cost__c — using the __c suffix convention for custom fields. Odoo's standard Amount field is reserved for opportunity amounts tied to sale orders, so these property-finance fields are kept separate.
LeadSimple
Source Name / Referrer Name
Odoo CRM
Custom fields on crm.lead (lead_source / referrer_name)
1:1LeadSimple tracks where the lead originated (Source) and which referrer sent it. Both map to custom text fields on crm.lead in Odoo. If your LeadSimple uses a fixed list of sources, we can convert these to selection fields for cleaner reporting in Odoo's crm.lead views.
LeadSimple
Tag List
Odoo CRM
crm.tag
1:1LeadSimple Tag List maps to Odoo's crm.tag model, which links to crm.lead via a many2many tag_ids field. We create any missing tags in Odoo before migration and apply them to the corresponding leads. Tags without a matching Odoo tag are created on the fly during the migration run.
LeadSimple
Comments / Notes
Odoo CRM
mail.message on crm.lead
1:1LeadSimple comments on a lead become Odoo mail.message records attached to the crm.lead. Original timestamps and the commenting user are preserved in the message body using Odoo's mail.thread tracking. This keeps the conversation history visible directly in the lead form view.
LeadSimple
Process (workflow checklist)
Odoo CRM
JSON export file
1:1LeadSimple Process records — conditional task checklists with stages — have no Odoo CRM equivalent. We export the full process definition as a structured JSON file listing each process, its conditional rules, assigned stages, and task instructions. Your Odoo admin uses this as a rebuild reference in Odoo Studio.
LeadSimple
Assigned To / Owner
Odoo CRM
res.users
1:1LeadSimple Assigned To (owner) is resolved by email match against Odoo res.users. Unmatched owners are flagged before migration — your team either pre-creates the user in Odoo or assigns those records to a fallback sales team. No crm.lead lands without an assigned user or team in Odoo.
LeadSimple
Created At / Closed At
Odoo CRM
create_date / date_closed on crm.lead
1:1LeadSimple Created At maps to crm.lead create_date. Odoo's write_date is updated at migration time, so the original creation timestamp is preserved explicitly via a custom field Original_Create_Date__c if audit continuity is required. Closed At maps to Odoo's date_closed field for leads that reached a Won or Lost stage.
| LeadSimple | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Contact (on Lead) | res.partner1:1 | Fully supported | |
| Pipeline | crm.team1:1 | Fully supported | |
| Stage Name | crm.stage1:1 | Fully supported | |
| Property Type | Custom field on res.partner (property_type)1:1 | Fully supported | |
| Occupancy | Custom field on res.partner (occupancy_status)1:1 | Fully supported | |
| Number of Units | Custom field on res.partner (number_of_units)1:1 | Fully supported | |
| Annual Contract Value / Cost | Custom fields on crm.lead (annual_contract_value / property_cost)1:1 | Fully supported | |
| Source Name / Referrer Name | Custom fields on crm.lead (lead_source / referrer_name)1:1 | Fully supported | |
| Tag List | crm.tag1:1 | Fully supported | |
| Comments / Notes | mail.message on crm.lead1:1 | Fully supported | |
| Process (workflow checklist) | JSON export file1:1 | Fully supported | |
| Assigned To / Owner | res.users1:1 | Fully supported | |
| Created At / Closed At | create_date / date_closed on crm.lead1: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.
LeadSimple gotchas
Notes and Activities excluded from bulk CSV export
No public API — migration requires workaround
Contact-level custom fields can vary per owner on the same property
Per-door pricing on Operations layer is a billing artifact not migratable
Workflow automation must be manually rebuilt on the destination
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
Audit LeadSimple data export and authenticate API access
FlitStack pulls a full CSV export from LeadSimple covering all leads, pipelines, stages, contacts, and custom field definitions. We simultaneously verify API access for activity and note history — if the API is not enabled, we flag it and scope the migration to the CSV export only. The audit report lists record counts by pipeline, identifies leads with missing property fields, and counts the total number of custom field definitions that need Odoo custom field creation. This report is shared with your Odoo admin as the schema setup checklist.
Create Odoo custom fields and crm.team structure
Your Odoo admin (or FlitStack, via Odoo Studio access) creates the custom fields on res.partner and crm.lead identified in the audit — property_type, occupancy_status, number_of_units, annual_contract_value, property_cost, referrer_name, and source_system_id. We also create one crm.team per LeadSimple pipeline and define crm.stage records matching each pipeline's stage names in the correct sequence. This step gates the data migration — no records move until the destination schema is confirmed ready.
Resolve LeadSimple owners to Odoo users by email
LeadSimple Assigned To values are matched against Odoo res.users by email address. FlitStack generates an owner-resolution report listing every LeadSimple owner and their Odoo user match status. Owners with no matching Odoo user are flagged as 'unresolved' — your team either creates the Odoo user before migration or designates a fallback owner. No crm.lead is written without a resolved user_id or team_id in Odoo. Tag records are also synced: LeadSimple tags are created in Odoo crm.tag before records land.
Run sample migration with field-level diff on 100–300 records
A representative slice — spanning multiple pipelines, lead stages, and property types — migrates first into the live Odoo instance (or a dedicated test database if preferred). FlitStack generates a field-level diff comparing every source field against its destination value, flagging mismatches in custom field mapping, stage assignment, and owner resolution. You review the diff and approve before the full run commits. This is where property-type value mapping and occupancy status translation are validated.
Execute full migration with delta-pickup window
The complete LeadSimple dataset migrates via the Odoo XML-RPC API (or CSV bulk import if the Odoo plan requires it). Activity history and notes are written to Odoo mail.message and mail.activity records. After the full run completes, a 24–48 hour delta window captures any LeadSimple records modified during the cutover period. An audit log records every operation; if reconciliation finds discrepancies, one-click rollback reverts the migration run so you can correct and retry without touching the source data.
Platform deep dives
LeadSimple
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across LeadSimple and Odoo CRM.
Object compatibility
1 of 8 objects need a manual workaround.
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
LeadSimple: Not publicly documented.
Data volume sensitivity
LeadSimple 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 LeadSimple to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your LeadSimple 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 LeadSimple
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.