CRM migration
Field-level mapping, validation, and rollback between PropertySimple and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
PropertySimple
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between PropertySimple and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
PropertySimple stores real estate CRM data around contacts, property listings, and deal pipelines — each contact carries listing associations, ZIP-code marketing flags, and agent-owner relationships. Odoo CRM models the same data as crm.lead (opportunities and leads), res.partner (contacts and companies), and crm.team (sales teams). The migration must translate PropertySimple's property-centric deal records into Odoo crm.lead entries while collapsing contact associations into res.partner records. We extract PropertySimple data via its export API, reformat ZIP-code fields, listing metadata, and agent assignments into Odoo's ir.model.fields structure, then load via Odoo's xmlrpc interface. Activity logs (calls, emails, meetings) map to Odoo's mail.message and crm.activity models. Custom real-estate fields — property_type, listing_status, zip_exclusivity_flag — require Odoo custom field creation before data lands. Workflows, marketing sequences, and social media automation rules cannot migrate and must be rebuilt in Odoo's Automations or via the Odoo Apps Store. All owner resolution happens by email match against Odoo res.users.
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 PropertySimple 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.
PropertySimple
Contact
Odoo CRM
res.partner
1:1PropertySimple contacts map directly to Odoo res.partner records. The email, phone, name, and address fields carry over as-is. ZIP-code marketing flags from PropertySimple migrate as custom boolean or selection fields on res.partner. The contact's owner (agent) resolves to Odoo res.users by email match.
PropertySimple
Contact
Odoo CRM
crm.lead
1:manyPropertySimple contacts with an active deal/listings association split into two records: the base contact lands in res.partner, and the listing context creates a crm.lead entry. This dual-write approach preserves the full contact record while giving Odoo a pipeline record to manage the deal lifecycle.
PropertySimple
Company
Odoo CRM
res.partner (company type)
1:1PropertySimple company records — representing brokerages, property management firms, or landlord entities — map to res.partner with is_company=True. The company name, domain, industry, and website fields transfer directly. Parent‑child hierarchies map via Odoo's parent_id on res.partner. Any custom fields such as tax_id or regulatory_status are created as additional custom fields on the partner record before load.
PropertySimple
Listing / Property
Odoo CRM
crm.lead (custom fields)
1:1PropertySimple listing objects have no direct Odoo equivalent. We transform listing records into crm.lead entries, adding custom fields for listing_address, listing_price, listing_mls_number, property_type, and listing_status. The crm.lead name field holds the listing address or MLS description so it appears correctly in Odoo's pipeline kanban view.
PropertySimple
Deal
Odoo CRM
crm.lead
1:1PropertySimple deal records map 1:1 to Odoo crm.lead entries. The deal name populates crm.lead.name, the amount maps to expected_revenue, and the stage links to crm.stage via stage_id. Deal probability follows the stage probability in Odoo. Owner assignment resolves by email match to res.users; unmatched owners are flagged for user creation before load. Any deal-specific custom fields such as deal_source or referral_channel are created on crm.lead prior to migration.
PropertySimple
Pipeline
Odoo CRM
crm.stage + crm.team
1:1PropertySimple pipelines map to Odoo crm.team (one team per pipeline). Within each team, stages map to crm.stage records with sequence ordering and probability values that mirror the original PropertySimple stage definitions. If PropertySimple uses custom pipeline names, we create matching crm.team records in Odoo before loading data.
PropertySimple
Pipeline Stage
Odoo CRM
crm.stage
1:1Stage names are mapped value-by-value from PropertySimple to Odoo crm.stage. We preserve stage sequence, probability percentages, and the lost/won flags. Stage-entered timestamps from PropertySimple carry over as crm.lead.date_last_stage_update. If stages differ between pipelines in PropertySimple, each gets its own crm.stage group within the corresponding crm.team.
PropertySimple
Agent / Owner
Odoo CRM
res.users
1:1PropertySimple owner_id fields (agent assignments on contacts and deals) resolve by email to Odoo res.users. Agents without existing Odoo accounts are flagged in the pre-migration audit; your team can create the users first or assign records to a fallback agent. This prevents crm.lead.user_id null violations at load time.
PropertySimple
Activity (calls, emails, meetings)
Odoo CRM
mail.message + crm.activity
1:1PropertySimple activity log entries map to Odoo mail.message records linked to the corresponding res.partner or crm.lead. Call type logs create crm.activity records with subtype phone; email logs create mail.message with email subtype. Original timestamps, owners, and activity body text are preserved. Odoo chatter will display the imported history in the record's activity stream.
PropertySimple
Custom Property
Odoo CRM
ir.model.fields (custom)
1:1PropertySimple custom properties — zip_exclusivity_flag, listing_source, agent_tier, autopilot_status — require Odoo custom field creation before data loads. We deliver a custom field manifest specifying field name, type (boolean, selection, char, float), and target model (res.partner or crm.lead). Fields are created via Odoo Settings > Technical > Models before migration runs, then populated during the data load phase.
PropertySimple
Attachment / File
Odoo CRM
ir.attachment
1:1PropertySimple file attachments linked to contacts, listings, or deals download and re-upload to Odoo ir.attachment. Files attach to the corresponding res.partner or crm.lead record via res_model and res_id. File name, mimetype, and create date are preserved. Odoo's 25MB per-file limit applies; large files are flagged before migration.
PropertySimple
Marketing Sequence / Autopilot Rule
Odoo CRM
No equivalent
1:1PropertySimple Autopilot social media sequences and ZIP-code marketing rules have no Odoo equivalent. FlitStack exports the rule definitions — trigger conditions, content templates, posting schedules — as a JSON reference document. Your Odoo admin uses this to rebuild the logic in Odoo Automations or a compatible marketing app from the Odoo Apps Store.
| PropertySimple | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Contact | crm.lead1:many | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Listing / Property | crm.lead (custom fields)1:1 | Fully supported | |
| Deal | crm.lead1:1 | Fully supported | |
| Pipeline | crm.stage + crm.team1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Agent / Owner | res.users1:1 | Fully supported | |
| Activity (calls, emails, meetings) | mail.message + crm.activity1:1 | Fully supported | |
| Custom Property | ir.model.fields (custom)1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Marketing Sequence / Autopilot Rule | No 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.
PropertySimple gotchas
No documented public API for automated data extraction
ZIP Code exclusivity settings have no standard CRM equivalent
AI-generated content assets are platform-locked
Pricing tiers are tied to platform features, not data limits
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 PropertySimple data and create Odoo custom fields
We extract a full data export from PropertySimple covering contacts, companies, listings, deals, activities, and all custom property definitions. We profile record counts, identify duplicate contacts, and detect dirty data (missing emails, malformed addresses). Simultaneously, we create the Odoo custom fields required for PropertySimple's listing metadata — x_listing_mls__c, x_property_type__c, x_zip_exclusivity__c, and any agent-tier or autopilot-status fields — via Odoo Settings > Technical > Models so the schema is ready before data loads.
Pre-create Odoo crm.team and crm.stage records per PropertySimple pipeline
Before any data lands, we create the Odoo pipeline structure. Each PropertySimple pipeline becomes an Odoo crm.team record. Within each team, we create crm.stage records matching the PropertySimple stage names, sequence order, and probability percentages. This stage setup is critical — it determines how Odoo displays the pipeline kanban view and how stage_id on crm.lead resolves at load time. If PropertySimple has overlapping stage names across pipelines, we scope each to its owning team so there are no duplicate stage names at the global level.
Resolve owners and seed Odoo users by email match
We run a pre-flight audit matching every PropertySimple owner_id email against Odoo res.users. Any owner without a corresponding Odoo user account is flagged by name and email. Your team either creates the Odoo user first or designates a fallback user for assignment. No crm.lead or res.partner record loads without a resolved owner — this prevents the null user_id foreign key violations that would halt the migration. The audit report is delivered 48 hours before migration day so you have time to act.
Load companies, contacts, and listings into Odoo with ID mapping
We load data in dependency order: res.partner (companies) first, then res.partner (contacts) with parent_id linking to companies, then crm.lead for listings and deals. As records load, we build an internal ID mapping table (PropertySimple original ID → Odoo ir.model.data id) so subsequent activity logs and attachments can re-link to the correct Odoo records. This ID mapping is the backbone of the migration — without it, activity history attaches to orphaned or missing records.
Run sample migration with field-level diff and delta pickup
A representative slice of 100–500 records migrates first — spanning contacts, companies, listings, deals, and a few activity logs. We generate a field-level diff comparing source values against Odoo record values so you can verify stage mapping, owner resolution, and custom field population before the full run commits. After the full migration completes, a 24–48 hour delta-pickup window captures any PropertySimple records modified during the cutover window. Audit logs record every operation; one-click rollback is available if reconciliation identifies data integrity issues.
Platform deep dives
PropertySimple
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between PropertySimple and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across PropertySimple and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between PropertySimple 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
PropertySimple: Not publicly documented..
Data volume sensitivity
PropertySimple 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 PropertySimple to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your PropertySimple 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 PropertySimple
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.