CRM migration

Migrate from Property Shell to Odoo CRM

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 logo

Property Shell

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Property Shell and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Property Shell logo

Property Shell

What's pushing teams away

  • Limited publicly documented API or export mechanisms, making it difficult to extract data for reporting, backups, or migrations to another platform.
  • Smaller review base (29 verified reviews on Capterra) and thin community resources compared to established CRM platforms, making peer support harder to find.
  • As a niche platform targeting property developers in Australia and New Zealand, teams operating in other regions or industries may find the feature set too specialised for broader CRM needs.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Property Shell objects map to Odoo CRM

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

maps to

Odoo CRM

res.partner + crm.lead

many:1
Fully supported

Property 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

maps to

Odoo CRM

res.partner (is_company=True)

1:1
Fully supported

Property 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

maps to

Odoo CRM

crm.lead (opportunity mode)

1:1
Fully supported

Property 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

maps to

Odoo CRM

crm.team

1:1
Fully supported

Property 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

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Each 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

maps to

Odoo CRM

Custom Selection field on crm.lead

1:1
Fully supported

Property 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)

maps to

Odoo CRM

crm.activity + mail.message

1:1
Fully supported

Property 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

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Property 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

maps to

Odoo CRM

ir.model.data custom fields

1:1
Fully supported

Property 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

maps to

Odoo CRM

res.users

1:1
Fully supported

Property 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

maps to

Odoo CRM

No Odoo equivalent

1:1
Fully supported

Property 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

maps to

Odoo CRM

No Odoo equivalent

1:1
Fully supported

Property 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.

Gotchas + challenges

What specifically takes care here

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 logo

Property Shell gotchas

High

No documented public API for data export

High

Highly customised per-customer schema requires pre-migration field audit

Medium

Interactive Maps are visualisation-layer only and cannot be migrated

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Lifecycle stage has no native Odoo equivalent — it must be recreated as a custom field

    Property Shell's lifecycle_stage property (Prospect, Qualified, Under Contract, Settled) is central to property-development sales workflows. Odoo CRM has no native lifecycle stage field on crm.lead or res.partner. We create a custom Selection field called lifecycle_stage__c and populate it with the original values, but the stage-transition logic (e.g., 'automatically advance to Under Contract when deposit_amount > 0') must be rebuilt in Odoo's Automation menu or as server actions. Your Odoo admin should define the available options in the Selection field's dropdown before the migration runs, or the import will fail on unmapped values.

  • Property Shell's unified contact-company model requires a two-record strategy in Odoo

    Property Shell stores company data inline on the contact record alongside contact-specific fields. Odoo separates contacts (res.partner with is_company=False) from companies (res.partner with is_company=True), and both are distinct from the crm.lead pipeline record. If you migrate a Property Shell contact record without first creating its associated company res.partner, the contact will have no parent_id and company-level reporting (by developer, by project) will be incomplete. FlitStack AI sequences this migration to create company records first, then contact records, then crm.lead records linked via partner_id — preventing orphaned contact-company relationships in Odoo.

  • Pipeline stage sequences must be pre-created in Odoo before data lands

    Property Shell pipeline stages are named strings with custom order. Odoo crm.stage records have a sequence number, a team_id that scopes them to a specific crm.team, and a probability percentage. If the crm.stage records do not exist in Odoo before the migration runs, the stage_id foreign key on crm.lead will be null and all deals will appear without a pipeline stage in the Kanban view. FlitStack AI delivers a stage-mapping plan as part of the pre-migration schema setup document so your Odoo admin can create the crm.stage records in the correct sequence before data transfer begins.

  • Interactive mapping data and property-inventory status have no Odoo equivalent

    Property Shell's interactive mapping module tracks lot-level sales status (Available, Under Contract, Sold), release data, and stage visualizations for display suites and project websites. Odoo has no native map visualization module for property inventory. We export this data as a structured JSON file, but the interactive display itself must be rebuilt using Odoo's Website Builder with a custom map integration (e.g., Google Maps embed or a property-specific module from the Odoo Apps store). The inventory data is migrated as crm.lead records with property_type__c, lot_number__c, and settlement_date__c fields, but the visual map layer requires separate development.

  • Automation definitions cannot be imported into Odoo Studio or server actions

    Property Shell marketing automations (nurture journeys triggered by lifecycle stage changes, lead funnels, deposit reminder sequences) are stored as rule-action pairs in Property Shell's automation engine. Odoo's automation is built using ir.actions.server, automation.automation records, or Flow (in Odoo 18+). There is no import format shared between the two systems. FlitStack AI exports the automation definitions as a JSON document describing each trigger, condition, and action — your Odoo developer or Odoo partner uses this as a rebuild reference. Workflows that are business-critical should be documented before migration begins so the rebuild is scoped correctly.

Migration approach

Six steps for a successful Property Shell to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Property Shell logo

Property Shell

Source

Strengths

  • Purpose-built for property development projects with native concepts for lots, stages, releases, and settlements.
  • Real-time interactive mapping for display suites and project websites showing stock status and lot availability.
  • AI-powered lead scoring and automated nurture journeys from first enquiry through to settlement.
  • Comprehensive contract management with variation and upgrade tracking across the settlement lifecycle.
  • Integrates development, marketing, sales, and finance team collaboration within a single platform.

Weaknesses

  • No publicly documented API or developer portal — export and migration rely on ad-hoc data extraction.
  • Small review cohort and limited third-party community resources for troubleshooting or peer support.
  • Interactive Map geometry and visual stock statuses are UI-layer data not exposed for migration or backup.
  • Highly custom implementations per customer mean no standard schema — every migration requires a full field audit.
  • Platform is primarily oriented to the Australian property development market, limiting applicability for teams in other regions.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Property Shell and Odoo CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Property Shell: Not publicly documented.

  • Data volume sensitivity

    B

    Property Shell doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Property Shell to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Property Shell to Odoo CRM data migrations

Answers to the questions buyers ask most during Property Shell to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Property Shell to Odoo CRM migrations complete within 48–72 hours for datasets under 50,000 total records. The planning and schema-setup phase (creating crm.team, crm.stage, and custom fields in Odoo) typically takes 2–3 business days before the technical migration begins. Complex setups with multiple pipelines, heavy custom-property usage, or record counts above 500,000 extend the total timeline to 5–7 days. The delta-pickup window adds 24–48 hours after the main migration completes.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Property Shell.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day