CRM migration
Field-level mapping, validation, and rollback between Property Shell and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Property Shell
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Property Shell and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Property Shell organizes property-development sales data around a unified contact-company model with lifecycle stages, deal pipelines, and interactive mapping modules. Odoo CRM separates leads and opportunities into crm.lead while storing contacts and companies in res.partner, with opportunities linked via crm.lead.partner_id. The migration maps Property Shell contacts to res.partner (with a duplicate crm.lead created for every contact to preserve the pipeline view), Property Shell companies to res.partner records marked as companies, Property Shell deals to crm.lead records in opportunity mode, and Property Shell activities to mail.message and crm.activity records. We use Property Shell's API export and Odoo's XML-RPC write interface to transfer records with original create_date, write_date, and user_id ownership intact. Custom property fields on Property Shell records become ir.model.data custom fields on Odoo's corresponding model. Workflow automations, marketing sequences, and interactive mapping data do not have Odoo equivalents — we export workflow definitions as JSON for your Odoo developer to rebuild in Studio or with automation rules.
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 Property Shell 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.
Property Shell
Contact
Odoo CRM
res.partner + crm.lead
many:1Property Shell contacts map to both Odoo res.partner (base contact record) and crm.lead (pipeline record). We create the res.partner first, then create a crm.lead linked via partner_id for every contact so the pipeline view shows the full sales history. This avoids losing the deal context when contacts are imported as pure res.partner records.
Property Shell
Company
Odoo CRM
res.partner (is_company=True)
1:1Property Shell Company records migrate as Odoo res.partner with is_company=True. The contact records that reference a primary company link via parent_id to maintain the account hierarchy. Multi-company contacts collapse to one primary parent_id with additional companies surfaced as related res.partner records.
Property Shell
Deal
Odoo CRM
crm.lead (opportunity mode)
1:1Property Shell deal records map to Odoo crm.lead in opportunity mode. The deal name becomes crm.lead.name, amount maps to planned_revenue, and close date maps to date_deadline. Owner resolution uses email matching against Odoo res.users — unmatched owners are flagged before migration so your admin can pre-create users or assign a fallback.
Property Shell
Pipeline
Odoo CRM
crm.team
1:1Property Shell pipelines map to Odoo crm.team (sales team) records. Each Property Shell pipeline becomes one crm.team in Odoo, which scopes the pipeline view and team member access. If Property Shell has multiple pipelines per team, we create separate crm.team records and assign each one a default stage sequence.
Property Shell
Pipeline Stage
Odoo CRM
crm.stage
1:1Each Property Shell pipeline stage maps to an Odoo crm.stage record within the corresponding crm.team. Stage names, sequence order, and probability percentages are recreated value-by-value. Stage-entered timestamps from Property Shell are preserved in a custom stage_history__c datetime field on the crm.lead record since Odoo does not natively track stage-entry timestamps.
Property Shell
Lifecycle Stage
Odoo CRM
Custom Selection field on crm.lead
1:1Property Shell lifecycle stages (e.g., Prospect, Qualified, Under Contract, Settled) have no Odoo CRM native equivalent. We create a custom Selection field called lifecycle_stage__c on crm.lead and populate it with the original values from Property Shell. The original stage-transition timestamps are preserved in a companion lifecycle_stage_date__c custom Date field.
Property Shell
Activity (Call / Email / Meeting)
Odoo CRM
crm.activity + mail.message
1:1Property Shell logged calls and emails migrate as Odoo crm.activity records with the original subject, date, user_id, and body preserved. Meetings with start/end times migrate as calendar.event records linked to the crm.lead via activity_ids. All original timestamps are maintained so reporting on activity volume is consistent across the cutover.
Property Shell
Note / Attachment
Odoo CRM
ir.attachment
1:1Property Shell notes on contacts, companies, or deals migrate as Odoo mail.message records with message_type='comment'. File attachments are downloaded from Property Shell's document store and re-uploaded via Odoo's ir_attachment model, linked by res_model='crm.lead' or res_model='res.partner' and the corresponding record ID. Inline images in notes are re-hosted and the URLs updated.
Property Shell
Custom Property Fields
Odoo CRM
ir.model.data custom fields
1:1Property Shell custom property fields (e.g., Lot Number, Floor Plan Type, Settlement Date, Deposit Amount) that are not standard on res.partner or crm.lead become Odoo custom fields via Settings > Technical > Custom Fields. The field type is matched — text properties become Char, numeric properties become Float or Integer, date properties become Date. Selection fields require manual option re-creation in the Odoo UI after migration.
Property Shell
Owner / Team Member
Odoo CRM
res.users
1:1Property Shell owner IDs resolve against Odoo res.users by matching the owner email address to the Odoo user's login. Any owner with no matching Odoo user is flagged before the migration runs — your admin either creates the Odoo user or assigns those records to a designated fallback user. This prevents orphaned crm.lead records with no assigned sales rep.
Property Shell
Interactive Mapping Data
Odoo CRM
No Odoo equivalent
1:1Property Shell's interactive mapping module stores project stage maps, release data, and lot-level sales status. Odoo has no native mapping visualization module for property development. We export the mapping data as a structured JSON file that can be fed into a custom Odoo module or a third-party BI tool if the interactive display is business-critical.
Property Shell
Marketing Automation / Sequences
Odoo CRM
No Odoo equivalent
1:1Property Shell lead nurture journeys and marketing automations tied to lifecycle stages do not migrate. Odoo's marketing automation is built with separate Email Marketing and Marketing Automation apps and cannot import Property Shell's rule definitions. We export all automation definitions as a JSON schema document so your Odoo partner or developer can rebuild the logic in Odoo Studio or using server actions.
| Property Shell | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner + crm.leadmany:1 | Fully supported | |
| Company | res.partner (is_company=True)1:1 | Fully supported | |
| Deal | crm.lead (opportunity mode)1:1 | Fully supported | |
| Pipeline | crm.team1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Lifecycle Stage | Custom Selection field on crm.lead1:1 | Fully supported | |
| Activity (Call / Email / Meeting) | crm.activity + mail.message1:1 | Fully supported | |
| Note / Attachment | ir.attachment1:1 | Fully supported | |
| Custom Property Fields | ir.model.data custom fields1:1 | Fully supported | |
| Owner / Team Member | res.users1:1 | Fully supported | |
| Interactive Mapping Data | No Odoo equivalent1:1 | Fully supported | |
| Marketing Automation / Sequences | No Odoo equivalent1: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.
Property Shell gotchas
No documented public API for data export
Highly customised per-customer schema requires pre-migration field audit
Interactive Maps are visualisation-layer only and cannot be migrated
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 Property Shell data and export via API
FlitStack AI connects to Property Shell using your account's API credentials and audits the full record set: contacts, companies, deals, pipeline stages, activities, and attachments. We count distinct record types, identify custom property fields, detect multi-company contact associations, and flag any owner records without a valid email address. The audit output is a data inventory document used to build the field mapping plan and identify which custom fields need Odoo-side creation before migration.
Create Odoo schema: stages, teams, custom fields
Before data transfer begins, your Odoo admin (or our team acting as admin) creates the crm.team records, crm.stage sequences, and custom fields identified in the audit. The stage-mapping plan specifies stage names, sequence order, probability percentages, and won/lost flags for each Odoo stage. Custom fields (lifecycle_stage__c, lot_number__c, deposit_amount__c, etc.) are created via Settings > Technical > Custom Fields. This step is sequenced first because foreign key constraints in Odoo require stage records to exist before crm.lead records can reference them.
Run sample migration with field-level diff
A representative slice — typically 100–300 records spanning contacts, companies, deals, and a few activities — migrates into a staging Odoo database. We generate a field-level diff comparing source values to destination values, showing every field mapping with its before/after state. You verify that lifecycle_stage__c values, stage_id assignments, partner_id links, and owner resolution are correct before the full migration commits. This is the last chance to adjust mapping rules without touching production data.
Full migration with sequenced load order
The full migration runs in dependency order: res.partner (companies first, then contacts), then crm.team and crm.stage, then crm.lead records with their stage_id and partner_id foreign keys resolved. Activities and attachments follow. Owner resolution by email match runs continuously — any unresolved owner is logged and assigned to a fallback user rather than blocking the migration. All records retain their original create_date and write_date values via Odoo's ir.history-preservation custom fields.
Delta-pickup and cutover window
After the full migration completes, a delta-pickup window (24–48 hours) monitors Property Shell for any records created or modified during the cutover period. Delta records are migrated in a second pass using the same mapping rules. The audit log records every operation including record count, timestamp, and owner assignments. One-click rollback is available if reconciliation against the Property Shell export report identifies missing or mis-mapped records. After rollback window closes, the migration is considered complete and the automation JSON export is delivered for the Odoo rebuild phase.
Platform deep dives
Property Shell
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Property Shell and Odoo CRM.
Object compatibility
2 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
Property Shell: Not publicly documented.
Data volume sensitivity
Property Shell 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 Property Shell to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Property Shell 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 Property Shell
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.