CRM migration
Field-level mapping, validation, and rollback between Lofty and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Lofty
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Lofty and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Lofty organizes real estate lead data around a property-centric model: leads with mortgage and property associations, pipelines with real estate transaction stages (Active, Under Contract, Inspection, Closed), and built-in texting and AI lead gen. Twenty CRM is a general-purpose open-source CRM built on PostgreSQL with People, Companies, Opportunities, Notes, and Tasks as standard objects. Its data model is intentionally generic — there is no native real estate pipeline stage set, no mortgage field, and no built-in lead-generation tooling. We migrate Lofty contacts as Twenty People, Lofty companies as Twenty Companies, and Lofty deals as Twenty Opportunities. The pipeline stage translation is the most nuanced step — Lofty's real estate stages like 'Under Contract' and 'Inspection' have no native Twenty equivalent and must be mapped to Twenty's OpportunityStatus pick-list values or stored as a custom field. Lofty's 64-bit integer IDs require string storage in Twenty to avoid JavaScript precision loss. Lofty's $500 data export charge is a pre-migration cost that teams often discover late; we surface it in the scoping phase so budget planning includes it. We sequence the migration in waves (90-day API windows from Lofty's query constraint), run a sample diff, then execute with a 24–48h delta window. Texting flows, property associations, and lead-gen automations do not migrate — Twenty's workflow builder rebuilds those.
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 Lofty 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.
Lofty
People / Lead
Twenty CRM
People
1:1Lofty contacts and leads map directly to Twenty People as the primary CRM record type. The contact's primary email address serves as the unique import key to prevent duplicate creation. Since Twenty's native CreatedAt timestamp is set at the time of import rather than preserving the original date, the original Lofty create date is stored in a custom datetime field on each record for historical accuracy and reporting purposes.
Lofty
Company
Twenty CRM
Company
1:1Lofty companies map 1:1 to Twenty Companies without any transformation required. The company name field serves as the unique import key to ensure each company is created once. Standard fields including employee count, annual revenue, and industry classification map directly to their corresponding Twenty Company fields. For companies with multiple addresses in Lofty, only the primary address is imported to maintain clean data.
Lofty
Deal
Twenty CRM
Opportunity
1:1Lofty deals are migrated as Twenty Opportunities, representing the deal lifecycle in Twenty's data model. The deal name maps to Opportunity name, amount transfers directly, and close date becomes the expected close date. Pipeline stage is translated through value-mapping to the OpportunityStatus pick-list field, ensuring deal progress is reflected accurately.
Lofty
Pipeline
Twenty CRM
OpportunityStatus (custom values)
1:1Lofty's pipeline stages including Prospect, Active, Under Contract, Inspection, Appraisal, and Closed reflect real estate transaction milestones that do not exist in Twenty's default OpportunityStatus configuration. We create a custom pick-list in Twenty's Data Model with option values matching each Lofty stage name exactly. Each deal's pipeline_stage value is then mapped by name to the corresponding Twenty OpportunityStatus value, preserving the full sales cycle representation in the new CRM.
Lofty
Pipeline Stage
Twenty CRM
OpportunityStatus
1:1Every Lofty pipeline stage receives a direct mapping to a corresponding Twenty OpportunityStatus option value during migration. Probability weights associated with each stage in Lofty are preserved as a custom number field on the Twenty Opportunity record. Stage-entered timestamps recording when a deal moved into each pipeline stage are saved as custom datetime fields to maintain historical reporting continuity in Twenty's analytics.
Lofty
Note
Twenty CRM
Note
1:1Lofty notes are transferred to Twenty Notes using the standard relation model that links each note to its parent record. Notes attached to People, Companies, or Opportunities in Lofty are associated with the corresponding Twenty object through the standard note relationship mechanism. Rich text formatting including bold, italic, lists, and embedded links is preserved during migration where Lofty's note format supports these elements.
Lofty
Call / Email Log
Twenty CRM
Task
1:1Lofty's call and email activity logs are transformed into Twenty Tasks, with the activity type determining the Task type field value. Call activities receive type='Call' and email activities receive type='Email', while the subject line from each activity becomes the Task title. Original activity timestamps are preserved as the task due date or completion date, and assigned owner information is transferred to maintain accountability records.
Lofty
Meeting / Appointment
Twenty CRM
Task
1:1Lofty meetings are migrated as Twenty Tasks with Task type set to 'Meeting'. Start and end times are preserved in datetime fields, location transfers as text, and attendees are stored as custom fields. Each meeting task links to its associated People or Opportunity record using Twenty's standard relationship model.
Lofty
Custom Field (lead_type, lead_source, mortgage_info, etc.)
Twenty CRM
Custom Field on People / Company / Opportunity
1:1Lofty custom fields including lead_type, lead_source, and mortgage_info are created as custom fields in Twenty's Data Model under the matching object. Select and multi-select fields require option-value mapping where each Lofty option matches a Twenty option. Custom fields are positioned in the correct column view before migration.
Lofty
Owner / Agent
Twenty CRM
WorkspaceMember (resolved by email)
1:1Lofty owner and agent IDs are resolved to Twenty workspace members by matching email addresses. Each Lofty owner is compared against Twenty's user list using email as the matching key. Owners without a corresponding Twenty account are flagged in a pre-migration report — your team either invites them to Twenty first or assigns their records to a fallback member.
Lofty
Attachment / File
Twenty CRM
File (re-uploaded)
1:1Lofty file attachments including documents and images are downloaded and re-uploaded to Twenty's file storage system. File size limits imposed by Twenty are respected during re-upload, and inline images in notes are extracted as separate attachments. The parent record linking each file to its associated People, Company, or Opportunity is preserved.
Lofty
Texting Flow / AI Assistant
Twenty CRM
No equivalent
1:1Lofty's bundled texting flows and AI virtual assistant are real-estate-specific automation tools with no direct equivalent in Twenty CRM. The 10DLC-compliant texting platform, AI lead generation, and automated response sequences are tied to Lofty's contact and property model. These constructs cannot be exported and must be rebuilt using Twenty's workflow builder or a third-party texting integration such as Twilio post-migration.
| Lofty | Twenty CRM | Compatibility | |
|---|---|---|---|
| People / Lead | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | OpportunityStatus (custom values)1:1 | Fully supported | |
| Pipeline Stage | OpportunityStatus1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Call / Email Log | Task1:1 | Fully supported | |
| Meeting / Appointment | Task1:1 | Fully supported | |
| Custom Field (lead_type, lead_source, mortgage_info, etc.) | Custom Field on People / Company / Opportunity1:1 | Fully supported | |
| Owner / Agent | WorkspaceMember (resolved by email)1:1 | Fully supported | |
| Attachment / File | File (re-uploaded)1:1 | Fully supported | |
| Texting Flow / AI Assistant | 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.
Lofty gotchas
API date-range queries capped at 90 days
64-bit integer IDs risk JavaScript precision loss
Starter tier custom field cap breaks complex schemas
Data export requires $500 fee unless handled during subscription
Documentation site migration disrupts integration references
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 Lofty data and configure Twenty schema
We begin by reading Lofty's data model through the Open API: contacts, companies, deals, pipeline stages, custom fields, and activity logs. We identify the 90-day query windows required to pull full history and flag any records with IDs above the JavaScript safe-integer threshold. In parallel, we configure Twenty's Data Model — creating custom fields for Lofty lead_status, lead_source, lead_type, mortgage fields, and probability; setting up OpportunityStatus option values to match Lofty pipeline stages; and verifying that column views include the new fields before data lands.
Extract Lofty data in 90-day windows
Lofty's API constrains each date-filtered query to a 90-day range. We run sequential extraction batches across all object types, storing Lofty's 64-bit integer IDs as text fields throughout. The export captures all standard objects plus custom field data. For large datasets, we extract in background batches to stay within Lofty's rate limits and avoid throttling the source account during business hours. The Lofty data portability fee is confirmed before this step so extraction proceeds without billing surprises.
Resolve owners and validate relationship integrity
Lofty owner IDs are resolved to Twenty workspace members by email address match. Any owners without a corresponding Twenty user are flagged in a pre-migration report — your team either invites them to Twenty first or designates a fallback owner. We validate foreign-key relationships: companies must exist before contacts link to them, contacts must exist before deals reference them, and deal-contact associations are preserved through the migration sequence. This step ensures no orphaned records land in Twenty.
Run a sample migration with field-level diff
A representative slice — typically 100–500 records spanning people, companies, deals, and activities — migrates to Twenty first. We generate a field-level diff report showing source value versus destination value for every mapped field. You verify that pipeline stage names resolved to the correct Twenty OpportunityStatus values, that custom field data landed in the right columns, and that owner resolution produced expected assignments. No full run commits until you sign off on the sample diff.
Execute full migration with delta-pickup window
The full dataset migrates to Twenty. A 24–48 hour delta-pickup window opens simultaneously — any records created or modified in Lofty during the cutover are captured and applied to Twenty before go-live. FlitStack AI uses scoped read access on Lofty throughout; your team keeps working in Lofty uninterrupted. An audit log records every operation, and one-click rollback is available if reconciliation finds unexpected discrepancies. Once you confirm the Twenty data matches your expectations, the cutover is complete.
Platform deep dives
Lofty
Source
Strengths
Weaknesses
Twenty 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 Lofty and Twenty 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
Lofty: Not publicly documented on developer.lofty.com — we implement exponential backoff and respect 429 responses as rate limit signals.
Data volume sensitivity
Lofty 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 Lofty to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Lofty 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 Lofty
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.