CRM migration

Migrate from Lofty to Twenty CRM

Field-level mapping, validation, and rollback between Lofty and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Lofty logo

Lofty

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Lofty and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Lofty logo

Lofty

What's pushing teams away

  • Poor customer support with significant delays and unhelpful responses during critical issues drives frustration and churn.
  • Steep learning curve overwhelms new users — the extensive functionality requires formal training before teams feel productive.
  • Inconsistent AI performance and slow platform speed frustrate users who rely on automation for lead follow-up.
  • Missing features like WordPress CMS integration and inadequate AI capabilities prompt teams to seek alternatives.
  • Some users report reliability concerns, with one stating 'everything is broken' and questioning ongoing development.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Lofty objects map to Twenty CRM

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

maps to

Twenty CRM

People

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

Company

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

OpportunityStatus (custom values)

1:1
Fully supported

Lofty'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

maps to

Twenty CRM

OpportunityStatus

1:1
Fully supported

Every 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

maps to

Twenty CRM

Note

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

Task

1:1
Fully supported

Lofty'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

maps to

Twenty CRM

Task

1:1
Fully supported

Lofty 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.)

maps to

Twenty CRM

Custom Field on People / Company / Opportunity

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

WorkspaceMember (resolved by email)

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

File (re-uploaded)

1:1
Fully supported

Lofty 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

maps to

Twenty CRM

No equivalent

1:1
Fully supported

Lofty'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.

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.

Lofty logo

Lofty gotchas

High

API date-range queries capped at 90 days

Medium

64-bit integer IDs risk JavaScript precision loss

Medium

Starter tier custom field cap breaks complex schemas

High

Data export requires $500 fee unless handled during subscription

Low

Documentation site migration disrupts integration references

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Lofty's 90-day query range forces multi-window API exports

    Lofty Open API v2.0 enforces a hard constraint: the range between start and end dates on any date-filtered query must not exceed 90 days, and each call returns at most the specified limit with a total count in the envelope. For migrations pulling full historical data, this means running sequential API calls across 90-day windows for every object type. We plan the extraction phase in date-banded batches, storing Lofty's 64-bit integer IDs as text fields in Twenty to prevent silent precision loss in JavaScript environments. The 90-day window is a Lofty API limitation, not a Twenty limitation — Twenty's import layer accepts the full dataset in one pass once extraction is complete.

  • Lofty's $500 data export charge is a pre-migration cost not visible until you request portability

    Lofty charges a $500 data portability fee when you request an export of your own CRM data. This charge is not prominently disclosed in the product UI and is frequently reported as a surprise by teams planning their exit. We surface this cost during the scoping phase before any migration work begins so your budget accounts for it. The export itself is handled via Lofty's API (for active extractions) or through a Lofty-assisted export request. Once exported, the data is yours to work with — FlitStack AI uses it as the migration source.

  • Real estate pipeline stages require manual configuration in Twenty's Data Model before mapping

    Lofty's deal pipelines are built around the real estate transaction lifecycle — stages like 'Under Contract,' 'Inspection,' and 'Appraisal' reflect home-sale milestones. Twenty's OpportunityStatus field starts as a blank select list with no pre-configured values. We cannot value-map stages that do not yet exist in Twenty. Before migration, your Twenty admin (or our team) must create the OpportunityStatus option values matching your Lofty pipeline stage names in Settings → Data Model. Without this step, deal stage data lands as blank or unmapped values, breaking pipeline reporting in Twenty.

  • Lofty's real estate texting flows and AI lead-gen automations have no Twenty equivalent

    Lofty bundles a 10DLC-compliant texting platform, AI virtual assistant, and paid lead-gen ad campaigns as core platform features. These are tied to Lofty's real estate contact model and do not export as transferable data — they are configuration constructs, not records. Twenty has no native texting, AI follow-up agent, or lead-gen campaign tool. Phone numbers migrate as standard fields on People records, but the active texting flows, sequence logic, and AI assistant behaviors must be rebuilt in Twenty's workflow builder or via a third-party integration post-migration.

  • Lofty's 64-bit integer IDs require string storage in Twenty to prevent JavaScript precision loss

    All entity IDs in Lofty's API are 64-bit integers. JavaScript's number type uses 53 bits of precision, meaning IDs larger than 2^53 will silently lose low-order bits when parsed as numbers — corrupting the ID. When we store Lofty IDs in Twenty as the SourceSystemID__c field, we preserve them as text strings, not numbers. This is handled automatically in the migration pipeline, but it means any downstream integrations that reference Lofty IDs must also use string storage to avoid mismatches during delta-sync runs.

Migration approach

Six steps for a successful Lofty to Twenty CRM data migration

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

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

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

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

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

Context on both ends of the pair

Lofty logo

Lofty

Source

Strengths

  • All-in-one real estate CRM combines lead gen, property tracking, landing pages, and AI tools.
  • Agent plan at $449/month is competitive for bundled functionality versus buying separate tools.
  • Enterprise tier offers custom branding, enhanced reporting, and flexible org structures for brokerages.
  • Positive reviews cite property auto-updates and seamless integrations saving agent time.
  • Supports OAuth 2.0 and API Key authentication for flexible third-party integrations.

Weaknesses

  • Steep learning curve requires formal training investment before teams become productive.
  • Customer support receives consistent negative reviews for responsiveness during critical issues.
  • Starter tier limited to 10 custom fields per type — insufficient for complex data models.
  • AI features described as inconsistent and slow in G2 reviews, affecting automation reliability.
  • Documentation site migration (moving to developer.lofty.com after August 2026) may disrupt integrations mid-migration.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

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 Lofty and Twenty 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

    Lofty: Not publicly documented on developer.lofty.com — we implement exponential backoff and respect 429 responses as rate limit signals.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Lofty to Twenty 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 Lofty to Twenty CRM data migrations

Answers to the questions buyers ask most during Lofty to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Lofty-to-Twenty migrations complete in 48–72 hours for under 50,000 records. The longest planning step is configuring Twenty's OpportunityStatus values and custom fields before data arrives. Larger datasets with multiple pipelines, heavy custom-field usage, or property-association complexity extend to 5–10 days. Note that Lofty's $500 data portability export fee is a separate pre-migration step that adds 1–3 business days depending on Lofty's export processing time.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Lofty.
Land in Twenty 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