CRM migration
Field-level mapping, validation, and rollback between SortScape and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
SortScape
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between SortScape and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
SortScape is a scheduling and job-management platform built for landscaping and field-service businesses. Its data model centers on Customers, Jobs, Visits, and Staff — flat objects optimized for route planning and Xero invoicing. Twenty CRM is a general-purpose open-source CRM built on People, Companies, Opportunities, Notes, and Tasks with a flexible custom-object layer. The migration requires reshaping SortScape's job-centric data into Twenty's relational model where contacts link to companies, and jobs become opportunities linked to those contacts and accounts. FlitStack AI reads SortScape CSV exports — the platform exposes no public API — normalizes field names, maps Customers to Twenty People with Company associations, Jobs to Opportunities with custom fields for job type and service items, and Visits to Tasks with opportunity links. Route optimization coordinates and scheduling metadata migrate as custom fields on Companies and Tasks. SortScape workflows, automated reminders, and Xero integration settings have no equivalent in Twenty and must be rebuilt in Twenty's workflow builder. All timestamps, owner assignments, and source-system IDs are preserved in custom fields for reporting continuity and delta-run de-duplication.
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 SortScape 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.
SortScape
Customer
Twenty CRM
People
1:1SortScape Customer maps to Twenty People. First name and last name concatenate into Twenty's displayName. Email, phone, and address fields map to their Twenty equivalents. The SortScape customer ID is stored as Source_System_ID__c on the Twenty record for traceability. If a customer record lacks a last name, the first name populates displayName with a trailing space preserved for consistency.
SortScape
Customer
Twenty CRM
Companies
many:1SortScape Customer records that represent businesses (not individuals) merge into Twenty Companies. The customer name becomes the Company displayName. Address data from SortScape maps to the Twenty Company address fields. Individuals without a business name land as People records only.
SortScape
Job
Twenty CRM
Opportunities
1:1SortScape Job maps directly to Twenty Opportunities. Job title becomes the Opportunity name. Job status (scheduled, in-progress, completed, cancelled) maps via value_mapping to Twenty Opportunity stage values. Job amount and estimated cost migrate as the Opportunity amount. SortScape custom fields (job_type, priority, service_items) require Twenty custom fields.
SortScape
Job (route_location)
Twenty CRM
Custom field on Companies
1:1SortScape stores route-optimization coordinates on Jobs. These migrate as custom lat/lng text fields on the associated Twenty Company record. Twenty has no native routing engine; the coordinates are preserved for use with external mapping tools post-migration. The coordinate fields are labeled Route_Latitude__c and Route_Longitude__c for clear identification during import and reconciliation.
SortScape
Visit
Twenty CRM
Tasks
1:1SortScape Visit maps to Twenty Task. The visit's scheduled start/end time becomes the Task due date. Visit notes, visit status, and assigned staff member map as custom fields on the Task. The parent Job maps via OpportunityId so the task is linked to the correct deal in Twenty.
SortScape
Staff
Twenty CRM
WorkspaceMember
1:1SortScape Staff member name and email map to Twenty WorkspaceMember. Email is used as the unique identifier. Staff without a matching email in Twenty are flagged before migration; records can be reassigned to an existing Twenty user or left unassigned pending team invitation.
SortScape
Note / Attachment
Twenty CRM
Notes + Custom URL fields
1:1SortScape notes on jobs or customers migrate as Twenty Notes attached to the corresponding People or Opportunity record. File attachments (photos, signed documents) store as custom URL fields on the related Twenty record pointing to the exported file URL. Notes inherit the created date from SortScape where available, preserving the original context timeline.
SortScape
Job (original create date)
Twenty CRM
Custom datetime field on Opportunities
1:1Twenty's createdAt timestamp reflects the import date. SortScape's original job creation date is stored as Original_Job_Create_Date__c custom datetime for reporting continuity and audit purposes. This preservation allows you to run reports on job creation patterns over time, analyze seasonal trends from the source data, and maintain a complete audit trail without relying on Twenty's system-generated timestamps alone.
SortScape
Customer (tags / segment)
Twenty CRM
Custom text array field on People
1:1SortScape customer tags (landscape, maintenance, one-time) migrate as a custom text field on the Twenty People record. Twenty does not have a native tags array on People; the field is exported as a comma-separated string for reference. The custom field is named SortScape_Tag__c and appears in the People record detail view for quick filtering.
SortScape
Job (Xero invoice reference)
Twenty CRM
Custom text field on Opportunities
1:1SortScape's Xero invoice ID stored on a Job migrates as Xero_Invoice_Ref__c on the Twenty Opportunity. The field is informational only; Xero reconnection is a post-migration step that requires your Xero admin to re-authorize the integration in Twenty. After reconnection, invoice links can be rebuilt by matching the Xero_Invoice_Ref__c value against Xero's API.
SortScape
Workflow / Automated Reminder
Twenty CRM
Workflows (Twenty)
1:1SortScape automated reminders tied to visit scheduling and job-status changes have no equivalent in Twenty's workflow builder. We export SortScape workflow definitions as a reference JSON. Your Twenty admin rebuilds these as workflow triggers on the Opportunity object using the task due date as the trigger condition.
SortScape
Route Optimization Settings
Twenty CRM
N/A
1:1SortScape's route-optimization engine and saved route configurations are proprietary to the SortScape scheduler and cannot be extracted. Start/end addresses for each job visit migrate as Company address fields and Task notes. Route planning must be rebuilt using a dedicated routing tool or external optimization service post-migration.
| SortScape | Twenty CRM | Compatibility | |
|---|---|---|---|
| Customer | People1:1 | Fully supported | |
| Customer | Companiesmany:1 | Fully supported | |
| Job | Opportunities1:1 | Fully supported | |
| Job (route_location) | Custom field on Companies1:1 | Fully supported | |
| Visit | Tasks1:1 | Fully supported | |
| Staff | WorkspaceMember1:1 | Fully supported | |
| Note / Attachment | Notes + Custom URL fields1:1 | Fully supported | |
| Job (original create date) | Custom datetime field on Opportunities1:1 | Fully supported | |
| Customer (tags / segment) | Custom text array field on People1:1 | Fully supported | |
| Job (Xero invoice reference) | Custom text field on Opportunities1:1 | Fully supported | |
| Workflow / Automated Reminder | Workflows (Twenty)1:1 | Fully supported | |
| Route Optimization Settings | N/A1: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.
SortScape gotchas
Export is desktop-only and admin-restricted
Route optimization settings do not persist as data
Xero invoice links break on migration
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 and audit SortScape CSV exports
FlitStack retrieves CSV exports from SortScape's desktop admin interface. We audit the export columns against SortScape's documented schema, identify records that require pagination across multiple export files (date-range splits or status-filtered exports for instances >20K records), and script a normalization step to handle unescaped delimiters in address fields and inconsistent date formats. We also capture any attached files from SortScape records that will become custom URL fields in Twenty.
Build Twenty custom fields and objects before import
Before any data loads into Twenty, FlitStack creates every required custom field in Settings → Data Model. This includes Job_Type__c and Priority__c on Opportunities, Original_Job_Create_Date__c datetime fields, SortScape_Tag__c on People, Xero_Invoice_Ref__c on Opportunities, and Route_Latitude__c/Route_Longitude__c on Companies. A pre-flight validation script verifies each custom field exists and matches the expected type (pick-list, text, datetime, URL) before the import run proceeds. Fields not present at import time result in silent data loss from that column.
Sequence the import: Companies → People → Opportunities → Tasks
Twenty's relational model requires parent records to exist before children can reference them. We import in strict order: Companies first (for the companyId link on People), then People with companyId resolved by email-domain match or explicit mapping, then Opportunities with People as the primary contact and Company as the account, then Tasks linked to Opportunities via opportunityId. Staff members are imported as Twenty WorkspaceMembers before visits so the assignee field resolves correctly by email. Any circular references (a Customer with a parent Company that is also a Customer) are flagged and resolved manually.
Run a sample migration with field-level diff
A representative slice of 100–500 records spanning the full object range migrates first. We generate a field-level diff comparing source CSV values to their Twenty counterparts across every mapped field — verifying that pick-list values resolved correctly, datetime fields preserved original timestamps, and owner resolution by email produced expected assignee values. You review the diff before the full run commits. Any incorrect mappings are corrected in the transformation logic before the production run executes.
Execute full migration with delta-pickup and rollback
The full dataset migrates against your Twenty workspace. A delta-pickup window of 24–48 hours captures any records created or modified in SortScape during the cutover window. Every operation is written to an audit log with source record ID, destination record ID, transformation applied, and timestamp. If reconciliation shows data discrepancy, one-click rollback reverts the Twenty workspace to its pre-migration state. Post-migration, we deliver a summary report with record counts per object, unassigned record counts (staff not matched by email), and the transformation JSON used so your Twenty admin can reproduce the mapping for future incremental syncs.
Platform deep dives
SortScape
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 SortScape 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
SortScape: Not publicly documented.
Data volume sensitivity
SortScape 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 SortScape to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your SortScape 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 SortScape
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.