CRM migration
Field-level mapping, validation, and rollback between Property Shell and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Property Shell
Source
Twenty CRM
Destination
Compatibility
13 of 13
objects map 1:1 between Property Shell and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Property Shell is a purpose-built real estate CRM that stores Leads, Projects, Units, Contracts, and custom fields using a data model optimized for property development workflows — including settlement stages, unit types, developer deposits, and automated payment flags. Twenty CRM is a PostgreSQL-backed open-source CRM with a generic object model: People (contacts), Companies (accounts), Opportunities (deals), Notes, Tasks, and unlimited custom objects and fields with no field-name suffix convention. FlitStack AI maps Property Shell's Lead records to Twenty People, Projects to Companies, and Units either to custom Opportunity properties or a dedicated custom object depending on their cardinality. Property Shell's developer-name, settlement-date, and deposit-tracking fields migrate as custom fields in Twenty — __c suffixes are not used; fields appear with their configured display names. The migration runs via formatted CSV import into Twenty's /import endpoint, sequenced so Companies exist before People, and People before Opportunities, matching Twenty's import-order constraint. Workflows, lead nurturing journeys, automated email sequences, and contract management automation do not migrate — those are documented as Property Shell platform configuration and must be rebuilt in Twenty's workflow builder or a third-party automation layer. A 24–48 hour delta pickup window captures in-flight changes during cutover so the final state in Twenty reflects every deal moved since the migration timestamp.
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 Twenty 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
Lead
Twenty CRM
People
1:1Property Shell Lead records map 1:1 to Twenty People. Standard fields including first name, last name, email address, phone number, and source campaign migrate as their direct Twenty equivalents. Mobile numbers map to the phone field if no separate mobile field exists. Owner assignment resolves by email match against Twenty workspace members — the owner email on each Property Shell Lead is matched to a confirmed Twenty user account, and unmatched owners are flagged before migration so no record lands without an assignee.
Property Shell
Project
Twenty CRM
Company
1:1Property Shell Projects — representing a development site or property project — map to Twenty Companies. The project name becomes the Company displayName, address fields map to the address compound, and the development type maps as a custom select field on the Company record.
Property Shell
Unit
Twenty CRM
Opportunity (with custom unit fields)
1:1Property Shell Unit records — representing an individual apartment, lot, or villa within a development — map to Twenty Opportunities with unit-specific properties (unit number, floor, bedrooms, car spaces) stored as custom fields on the Opportunity. The linked Project becomes the Opportunity's CompanyId. If Units are numerous (>500 per project), a dedicated custom object is recommended instead.
Property Shell
Contract
Twenty CRM
Custom Object: Contract
1:1Property Shell contract records — including variation tracking and settlement status — have no native equivalent in Twenty. We create a Contract custom object in Twenty with fields for contract number, exchange date, settlement date, purchaser name (linked to People), and related Opportunity. This must be configured in Settings → Data Model before migration runs.
Property Shell
Lead Activity (call, meeting, note)
Twenty CRM
Task / Note
1:1Property Shell engagement logs — calls, meetings, and notes — map to Twenty Tasks and Notes respectively. Call logs and meeting notes from Property Shell become Twenty Task or Note records on the linked People record. Original timestamps, owner assignments, and any attached file references are preserved during migration. The Task Type field on each Task is set to 'Call' or 'Meeting' based on the source activity kind detected in the Property Shell export.
Property Shell
Automated Deposit / Payment Record
Twenty CRM
Custom Object: PaymentRecord
1:1Property Shell tracks deposit amounts, payment milestones, and receipt status as part of its contract management. These have no Twenty equivalent — we create a PaymentRecord custom object with fields for amount, currency, milestone type, status, and linked Opportunity/Contract. Payment status must be rebuilt in Twenty as a custom select field.
Property Shell
Pipeline Stage (Off-the-plan, Under Construction, Completed, Settled)
Twenty CRM
Opportunity Stage
1:1Property Shell settlement stages map to Twenty Opportunity stage values. Each stage maps value-by-value: 'Off-the-plan' → 'Prospecting', 'Under Construction' → 'Qualification', 'Completed' → 'Proposal Sent', 'Settled' → 'Closed Won'. Stage transition timestamps are preserved as custom datetime fields for reporting continuity.
Property Shell
Agent / Team Member
Twenty CRM
Workspace Member
1:1Property Shell users and agent assignments resolve by email match against Twenty workspace members. User records are extracted from Property Shell ownership and assignment fields, then matched by email address to existing Twenty workspace members. Users without a matching Twenty account must be invited via Settings → Members and accept the invitation before migration runs, ensuring all owner lookups resolve correctly on import.
Property Shell
Attachment / File
Twenty CRM
File (linked to record)
1:1Property Shell files attached to Leads, Projects, or Units are downloaded and re-uploaded as linked files in Twenty. File size limits depend on the hosting configuration — self-hosted Twenty has no platform-level size cap; Twenty Cloud has a 25MB per-file limit.
Property Shell
Campaign / Marketing Source
Twenty CRM
Custom Field on People
1:1Property Shell tracks lead source campaigns (portal listings, display suite visits, referral programs). These store as a custom select field on Twenty People. Campaign-level performance data does not migrate — source attribution is preserved but campaign analytics must be rebuilt in Twenty's reporting module.
Property Shell
Lead Nurture Sequence
Twenty CRM
No Equivalent
1:1Property Shell automated nurture journeys and email sequences do not have a structural equivalent in Twenty CRM. The sequence definitions (triggers, delays, email content) are exported as a JSON reference document for manual rebuild in Twenty's workflow engine or an external email tool.
Property Shell
Multi-agent Assignment
Twenty CRM
Relation Field / Junction
1:1Property Shell allows multiple agents assigned to a single lead or unit. In Twenty, the primary agent maps to Opportunity assignee; secondary agents are added via a multi-select relation field on the Opportunity or a custom junction object if the relationship is many-to-many.
Property Shell
Property Type (Residential, Commercial, Industrial, Land)
Twenty CRM
Custom Select on Company or Opportunity
1:1Property Shell development property types map as custom select fields in Twenty. The pick-list values are mapped one-by-one: 'Residential' → 'Residential', 'Commercial' → 'Commercial', 'Industrial' → 'Industrial', 'Land' → 'Land'. These can live on the Company record (for project-level typing) or on the Opportunity (for unit-level typing).
| Property Shell | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | People1:1 | Fully supported | |
| Project | Company1:1 | Fully supported | |
| Unit | Opportunity (with custom unit fields)1:1 | Fully supported | |
| Contract | Custom Object: Contract1:1 | Fully supported | |
| Lead Activity (call, meeting, note) | Task / Note1:1 | Fully supported | |
| Automated Deposit / Payment Record | Custom Object: PaymentRecord1:1 | Fully supported | |
| Pipeline Stage (Off-the-plan, Under Construction, Completed, Settled) | Opportunity Stage1:1 | Fully supported | |
| Agent / Team Member | Workspace Member1:1 | Fully supported | |
| Attachment / File | File (linked to record)1:1 | Fully supported | |
| Campaign / Marketing Source | Custom Field on People1:1 | Fully supported | |
| Lead Nurture Sequence | No Equivalent1:1 | Fully supported | |
| Multi-agent Assignment | Relation Field / Junction1:1 | Fully supported | |
| Property Type (Residential, Commercial, Industrial, Land) | Custom Select on Company or Opportunity1: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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Audit Property Shell data export and model mapping plan
FlitStack AI retrieves the Property Shell CSV export and inspects the column headers, record counts per object (Leads, Projects, Units, Contracts), and any custom field definitions visible in the export. We compare the exported schema against Twenty's standard object fields and identify every field that requires a custom field to be created in Twenty Settings → Data Model before import. We also flag any cross-linked units (many-to-many relationships) that need a junction object, and any missing email addresses on owner records that block owner resolution.
Create custom objects and fields in Twenty
Before any data moves, FlitStack AI generates a custom object setup plan for Twenty. This includes the Contract custom object (with fields for contract number, exchange date, settlement date, variation status), the PaymentRecord custom object (with amount, milestone, receipt reference, status), and custom fields on People (source__c, budget__c), Company (propertyType__c, developmentStage__c, launchDate__c), and Opportunity (unitType__c, bedrooms__c, bathrooms__c, carSpaces__c, floorLevel__c, areaSqm__c, depositAmount__c). The Twenty workspace admin creates these in Settings → Data Model following our field specification. All custom fields must exist before the CSV import step runs.
Invite and resolve workspace members
FlitStack AI extracts owner and agent assignments from Property Shell records by email address. Before migration runs, all Property Shell users who own records must be invited to the Twenty workspace via Settings → Members and accept the invitation. Owner resolution maps Property Shell owner emails to Twenty workspace member IDs — any owner without a matching Twenty account is flagged and assigned to a fallback user so no record lands without an assignee. This step prevents orphaned records that cannot be queried by owner in Twenty after migration.
Run a sample migration with field-level diff
A representative slice migrates first — typically 100–500 records spanning Leads, a Project with its Units, and a few Contracts. We import into Twenty and generate a field-level diff report comparing source values against destination field values for every mapped column. You verify that settlement stages map correctly to Opportunity stages, deposit amounts land in the depositAmount__c custom field, unit types appear as select options in Twenty, and owner assignments resolve by email. Any mapping errors are corrected in the transformation script before the full run commits.
Full migration with delta-pickup cutover
The full dataset runs: Companies first, then People (linked to Companies via companyId), then Opportunities (linked to Company and People), then Contract records (linked to People and Opportunities), then Tasks, Notes, and Files. A delta-pickup window of 24–48 hours after the initial load captures any records modified or created in Property Shell during the cutover. FlitStack AI logs every operation in an audit trail, and one-click rollback is available if reconciliation fails. After rollback window closes, your team is live on Twenty CRM.
Platform deep dives
Property Shell
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Twenty CRM.
Object compatibility
3 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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Property Shell to Twenty 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 Twenty 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.