CRM migration
Field-level mapping, validation, and rollback between Zurple and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Zurple
Source
Twenty CRM
Destination
Compatibility
10 of 10
objects map 1:1 between Zurple and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
Twenty CRM
Person
1:1Zurple 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
Twenty CRM
Company
1:1Zurple 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
Twenty CRM
Opportunity
1:1Zurple 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
Twenty CRM
Opportunity.stage
1:1Each 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
Twenty CRM
Opportunity (pipeline context)
1:1Zurple 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
Twenty CRM
Person
1:1Zurple 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)
Twenty CRM
Task / Note
1:1Zurple 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
Twenty CRM
Note attachments
1:1Zurple 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
Twenty CRM
Custom field on Person
1:1Zurple 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
Twenty CRM
WorkspaceMember
1:1Zurple 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.
| Zurple | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Deal Stage | Opportunity.stage1:1 | Fully supported | |
| Pipeline | Opportunity (pipeline context)1:1 | Fully supported | |
| Lead | Person1:1 | Fully supported | |
| Activity (Call, Email, Meeting) | Task / Note1:1 | Fully supported | |
| Attachment / File | Note attachments1:1 | Fully supported | |
| Custom Property | Custom field on Person1:1 | Fully supported | |
| User / Owner | WorkspaceMember1: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.
Zurple gotchas
No public API for bulk data export
Automated nurture sequences do not transfer
Data ownership after termination is ambiguous
Lead quality from paid advertising is inconsistent
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
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.
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.
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.
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
Zurple
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 Zurple 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
Zurple: Not publicly documented.
Data volume sensitivity
Zurple 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 Zurple to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Zurple
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.