CRM migration

Migrate from Zurple to Twenty CRM

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

Zurple logo

Zurple

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between Zurple and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Zurple organizes real estate sales around lead generation websites, automated nurturing sequences, and deal pipelines with a focus on conversion tracking and behavioral lead scoring. The platform stores contacts, companies, deals, and activities with a set of standard fields plus custom properties for lead source, engagement metrics, and IDX website attribution. Twenty CRM structures data around five standard objects — People, Companies, Opportunities, Notes, and Tasks — with a flexible metadata-driven schema that supports unlimited custom objects and custom fields via the /metadata GraphQL API. The migration transfers contacts and companies directly as People and Companies, deals as Opportunities with stage mapping, and activity history as Notes and Tasks with original timestamps and assignee links preserved. Automated nurture sequences, behavior-triggered emails, and IDX lead-capture attribution logic have no native Twenty equivalent — these must be documented as a rebuild reference and reconstructed manually in Twenty's workflow builder or a replacement email tool. For bulk imports exceeding Twenty's 20,000-record CSV limit, FlitStack uses the REST and GraphQL batch APIs with rate limits of 100 requests per minute on the Pro tier and 200 per minute on the Organization tier. Custom fields created during migration are provisioned via Twenty's /metadata API before data lands, ensuring field availability at import time. The migration runs against scoped read-only credentials on Zurple; your team continues working in the source system throughout with a 24–48 hour delta-pickup window capturing in-flight changes at cutover.

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

Zurple logo

Zurple

What's pushing teams away

  • Lead quality is inconsistent — agents sourced through Zurple's paid traffic describe conversion rates as low, with leads described as cheap but unresponsive.
  • No documented public API means customers cannot self-serve data export, creating dependency on the vendor for any migration or backup.
  • A negative review alleges that after account termination, Zurple sent unsolicited messages to the departing agent's existing client contacts, raising concerns about data ownership.
  • Pricing is opaque — there is no publicly listed price on the website, requiring a sales call, which frustrates agents who want to compare cost before committing.

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 Zurple objects map to Twenty CRM

Each row shows how a Zurple 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.

Zurple

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Zurple contacts map directly to Twenty People. The primary company link becomes the companyId relation in Twenty. Contacts without a primary company are imported with companyId left null and flagged for manual association review after migration. This post-migration step allows your team to establish correct company associations using Twenty's UI or bulk-import tools. The original contact ID is preserved as Source_System_ID__c for traceability and deduplication on subsequent delta runs.

Zurple

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Zurple companies map 1:1 to Twenty Companies. Parent-company hierarchies map to Twenty's optional parentId relation. Multi-contact companies in Zurple become a single Company record in Twenty with multiple Person records linked via companyId. We deduplicate by name during the sample migration phase and flag any ambiguous matches for your review before the full run commits.

Zurple

Deal

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Zurple deals map to Twenty Opportunities. Deal name becomes Opportunity name, amount maps directly, close date maps to closeDate, and stage becomes the stage field. Owner is resolved by email match against Twenty Workspace Members before the full migration runs.

Zurple

Deal Stage

maps to

Twenty CRM

Opportunity.stage

1:1
Fully supported

Each Zurple pipeline stage value maps to a corresponding Twenty Opportunity stage value. Where Zurple stage names differ from Twenty's defaults, we create custom stage values via Twenty's metadata API before the import batch is built. This ensures stage labels, probabilities, and ordering match your current pipeline workflow from the first record imported.

Zurple

Pipeline

maps to

Twenty CRM

Opportunity (pipeline context)

1:1
Fully supported

Zurple pipelines have no native Twenty equivalent. We create a Pipeline_Name__c custom field on the Opportunity object to preserve which Zurple pipeline each deal originated from. Stage mapping then applies per-pipeline to preserve deal progression history. This allows you to filter and report on deals by their original pipeline in Twenty's UI after migration completes.

Zurple

Lead

maps to

Twenty CRM

Person

1:1
Fully supported

Zurple leads that have not converted to contacts land as Twenty People with a custom Lead_Source__c field set to 'Zurple Lead'. Original lead score or rating migrates to a numeric custom field if present in Zurple's export. Leads with a 'Converted' status route to the Contact mapping path, associating them with their converted Person record and preserving the conversion timestamp as a custom date field.

Zurple

Activity (Call, Email, Meeting)

maps to

Twenty CRM

Task / Note

1:1
Fully supported

Zurple email and call activities become Twenty Tasks linked to the parent Person or Company. Meeting activities become Notes with a timestamp header. Original activity date, duration, and assignee are preserved on each record. Attachments on activities migrate as file attachments on the corresponding Task or Note in Twenty, maintaining the complete activity history for each contact and company.

Zurple

Attachment / File

maps to

Twenty CRM

Note attachments

1:1
Fully supported

Zurple file attachments on contacts or deals re-upload as file attachments on the corresponding Twenty Person or Company note. Inline images embedded in Zurple notes are extracted, rehosted to a temporary storage bucket, and relinked in Twenty. We validate that each file is accessible and that the relinking produces a working URL before the migration run completes.

Zurple

Custom Property

maps to

Twenty CRM

Custom field on Person

1:1
Fully supported

Zurple custom properties on contacts — lead score, engagement metrics, IDX attribution data, source channel — become Twenty custom fields on the Person object. We create each field via Twenty's /metadata API, inferring field type from source data format. Picklist values, number ranges, and date formats are validated during the sample migration phase to catch type mismatches before the full run.

Zurple

User / Owner

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Zurple users are matched to Twenty Workspace Members by email address. Unmatched owners are flagged as a pre-migration task — your team either invites them to Twenty first or assigns their records to a fallback member before the full run. This prevents orphaned records and ensures every migrated deal, contact, and activity retains its correct assignee from day one in Twenty.

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.

Zurple logo

Zurple gotchas

High

No public API for bulk data export

Medium

Automated nurture sequences do not transfer

Medium

Data ownership after termination is ambiguous

Low

Lead quality from paid advertising is inconsistent

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

  • Twenty's CSV import caps at 20,000 records per file

    Twenty's built-in CSV import UI handles up to 20,000 records per file. If your Zurple export exceeds this across Companies, People, and Opportunities combined, FlitStack switches to the Twenty REST/GraphQL API batch path, which processes records in paginated batches of 200 with a rate limit of 100 requests per minute on the Pro tier and 200 per minute on Organization. API-based migrations require API credential configuration, pagination logic, and more involved error handling — we surface this in the pre-migration scope document so your team knows what path applies before we start. This is the most common surprise for mid-market migrations that exceed the CSV ceiling.

  • Automated nurture sequences have no Twenty equivalent

    Zurple's Conversations system sends behavior-triggered email sequences based on lead actions — clicks, page visits, and response patterns. Twenty's workflow builder handles record-triggered automations like creating a task when a stage changes or updating a field on a date, but does not support time-based outbound sequences or lead behavior scoring natively. We export your Zurple sequence definitions as a reference document your team can use to rebuild logic in a third-party email tool or in Twenty's workflow builder. This is a manual rebuild step, not an automated data migration, and it is included in your migration scope as a documented deliverable.

  • IDX website lead-capture associations do not transfer as operational logic

    Zurple generates branded IDX (Internet Data Exchange) websites that attach lead-capture source data to contact records — the URL referrer, search criteria, and listing viewed at time of capture are stored as Zurple-specific properties. Twenty does not have an IDX integration. These properties migrate as custom text fields on the Person record, preserving the raw data, but the marketing attribution logic that drove your nurture sequences (behavior triggers, response routing) has no direct equivalent in Twenty and must be rebuilt in your replacement email or marketing automation tool.

  • Twenty lacks a native lead-score field — historical scores become static values

    Zurple calculates and maintains a behavioral lead score on each contact, updated continuously based on engagement. Twenty has no built-in lead scoring field. We migrate the current score as a custom number field on the Person object, where it becomes a static historical value. Going forward, you can rebuild scoring logic using Twenty's workflow builder and custom formulas, or integrate a dedicated scoring tool via Twenty's webhooks or GraphQL API to keep scores dynamic.

  • Custom objects migrate but N:N relationships need junction objects

    Zurple supports custom objects for real-estate-specific entities like Properties, Listings, or Projects. Twenty supports custom objects via its /metadata API, and custom object records migrate directly. However, many-to-many relationships between custom objects and standard records — for example, a Property linked to both a Person and a Company — require junction objects in Twenty that may not exist in your current Zurple schema. We document every relationship discovered during the audit and create the necessary junction objects via Twenty's metadata API before the migration run.

Migration approach

Six steps for a successful Zurple to Twenty CRM data migration

  1. Extract Zurple data via API with read-only credentials

    FlitStack connects to Zurple's API to extract all contacts, companies, deals, leads, and activity records. We pull custom property definitions in parallel so we have the complete field inventory before building the mapping plan. The export runs with read-only credentials; your team continues working in Zurple throughout the migration window. We generate a record-count summary and a sample record for each object type before mapping begins, so you can verify data completeness before committing.

  2. Provision Twenty schema and generate import files or test API batch

    Before data lands, we create every custom field referenced in the mapping plan using Twenty's /metadata GraphQL API. This includes custom select options for lead status, industry values, and any pipeline-stage labels that don't match Twenty's defaults. If your migration uses the CSV import path, we generate formatted CSV files with headers matching Twenty's expected column names and in the correct import order: Companies first, then People with companyId links, then Opportunities. If it uses the API batch path, we verify credentials and run a single-record insert test before the full run.

  3. Run sample migration with field-level diff

    A representative slice — typically 100–300 records spanning all object types — migrates first. We generate a field-level diff comparing source values to destination values, surfacing mismatches in stage mapping, owner resolution, relationship linkage, and custom field population. You review the diff and approve the mapping before the full run commits. This step is where we catch duplicate company names, unmapped pick-list values, and missing owner email addresses before they affect thousands of records.

  4. Execute full migration with delta-pickup window

    The full migration runs against Twenty using the path determined during scoping. A delta-pickup window of 24–48 hours captures any records created or modified in Zurple during the cutover period. Each operation is logged to an audit trail. If reconciliation identifies missing, duplicated, or incorrectly mapped records, one-click rollback reverts the import and we re-run the affected object types before the window closes.

Platform deep dives

Context on both ends of the pair

Zurple logo

Zurple

Source

Strengths

  • Bundled IDX website with MLS integration removes the need for a separate real estate website vendor.
  • Behavior-driven automated nurture (Conversations™) handles lead follow-up without manual agent input.
  • Exclusive lead delivery model means leads in a target market are not shared with other Zurple agents in that same area.
  • Single dashboard combining lead generation, CRM pipeline, and automated nurture reduces tool fragmentation for solo agents.
  • Measurable revenue attribution — agents can track closings back to Zurple-sourced clients.

Weaknesses

  • No publicly documented API or bulk export mechanism, making data portability dependent on vendor cooperation.
  • Lead quality from paid advertising channels is inconsistent; some agents report poor conversion rates.
  • Pricing is opaque with no public tier listing, requiring a sales call for any cost evaluation.
  • Post-termination data handling is unclear; one negative review alleges unsolicited contact harvesting after account cancellation.
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 Zurple 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

    Zurple: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Zurple to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Zurple-to-Twenty migrations complete in 48–72 hours of clock time for setups with fewer than 50,000 total records. Larger migrations exceeding Twenty's 20,000-record CSV import ceiling require API batch processing, which extends the timeline to 5–10 days depending on data volume, the number of custom fields created during provisioning, and whether your migration uses the CSV path or the REST/GraphQL API path.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Zurple.
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