CRM migration

Migrate from SortScape to Twenty CRM

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

SortScape logo

SortScape

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between SortScape and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

SortScape logo

SortScape

What's pushing teams away

  • iOS mobile app requires frequent restarts — at least one reviewer notes the iPhone app becomes sluggish and needs regular reloading to stay functional.
  • Mapping features missing from the mobile app — route visualization and map interactions are available on desktop only, forcing field staff to switch devices.
  • Export functionality locked to desktop — only administrators on desktop screens can export data, which creates friction for teams working primarily from mobile devices.
  • Limited platform ecosystem — SortScape integrates primarily with Xero, leaving businesses that use other accounting platforms with manual workarounds.

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

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

maps to

Twenty CRM

People

1:1
Fully supported

SortScape 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

maps to

Twenty CRM

Companies

many:1
Fully supported

SortScape 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

maps to

Twenty CRM

Opportunities

1:1
Fully supported

SortScape 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)

maps to

Twenty CRM

Custom field on Companies

1:1
Fully supported

SortScape 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

maps to

Twenty CRM

Tasks

1:1
Fully supported

SortScape 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

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

SortScape 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

maps to

Twenty CRM

Notes + Custom URL fields

1:1
Fully supported

SortScape 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)

maps to

Twenty CRM

Custom datetime field on Opportunities

1:1
Fully supported

Twenty'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)

maps to

Twenty CRM

Custom text array field on People

1:1
Fully supported

SortScape 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)

maps to

Twenty CRM

Custom text field on Opportunities

1:1
Fully supported

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

maps to

Twenty CRM

Workflows (Twenty)

1:1
Fully supported

SortScape 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

maps to

Twenty CRM

N/A

1:1
Fully supported

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

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.

SortScape logo

SortScape gotchas

High

Export is desktop-only and admin-restricted

Medium

Route optimization settings do not persist as data

Medium

Xero invoice links break on migration

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

  • SortScape has no public API — all migration data comes through CSV export

    SortScape exposes no REST or GraphQL API for programmatic data extraction. All migration data is obtained via the CSV export function, which is available only from the desktop interface under an administrator account and is capped at 20,000 records per export. Large SortScape instances with >20,000 total records require multiple paginated exports using date filters or record-type filters. We script a pre-export parser to handle SortScape's CSV formatting inconsistencies (unescaped commas in address fields, varying column headers between exports) before ingestion. This manual export step adds 1–3 hours to project scoping and is the primary source of migration delay if SortScape exports are not prepared in advance.

  • Twenty's workflow builder does not natively replicate SortScape's job-scheduling automations

    SortScape workflows that send automated reminders when a visit is approaching, alert the crew lead when a job status changes, or trigger a customer follow-up email after job completion have no direct equivalent in Twenty's workflow builder at migration time. Twenty's workflow engine supports object-level triggers (when an Opportunity stage changes, send a notification), but time-based reminders tied to visit scheduling require a rebuild using workflow triggers on the Task object with time-delay conditions. We export your SortScape workflow definitions as a structured JSON reference document so your Twenty admin can recreate each automation with the correct trigger object and delay interval. Budget 3–5 hours per workflow for the rebuild.

  • SortScape's route-optimization data has no native destination in Twenty

    SortScape's Route Optimization feature stores start/end addresses, optimized visit sequence order, and distance data per job run. Twenty CRM has no routing engine and no native concept of optimized visit sequences. The latitude and longitude coordinates from SortScape's route data migrate as custom text fields on the Company record, but the ordered visit sequence, distance savings metrics, and any custom routing rules are lost. Teams that rely on SortScape's routing for daily crew dispatch must select a dedicated routing tool (Route4Me, Badger Maps, or similar) and rebuild their route sequences post-migration. FlitStack can map the customer location coordinates into a format compatible with routing tools as a scoped add-on.

  • Twenty's People object requires custom fields for several standard SortScape contact fields

    Twenty's base People object ships with name, email, and a linked Company relation as the primary fields. SortScape's Customer export includes phone, mobile, address (split across multiple columns), company name, and custom tags — none of which map to Twenty's standard People fields without custom field creation. If your SortScape export contains phone numbers in the mobile column, those records will appear without a phone number in Twenty until the custom field is created in Settings → Data Model before the import runs. We deliver a pre-flight checklist specifying every custom field name, type, and pick-list value that must exist in Twenty before data is loaded, including the exact SortScape column that populates each field.

Migration approach

Six steps for a successful SortScape to Twenty CRM data migration

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

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

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

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

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

Context on both ends of the pair

SortScape logo

SortScape

Source

Strengths

  • iOS-native app tailored for field service workers managing garden and lawn care jobs.
  • Direct Xero integration for real-time invoicing directly from the job schedule.
  • Route optimization feature reorders job runs to minimize travel time between sites.
  • CSV export available for both customer data and scheduled visits from the admin panel.
  • Australian-based customer support with fast response times cited in reviews.

Weaknesses

  • Mobile app (iOS) has stability issues requiring regular restarts according to user feedback.
  • Mapping and route visualization features are desktop-only, not available in the mobile app.
  • Data export restricted to administrators on desktop screens only.
  • No public API documented; integrations are limited to Xero and whatever the platform explicitly supports.
  • Limited scale for larger field service operations — most positive reviews describe solo or very small team usage.
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 SortScape 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

    SortScape: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Small SortScape instances with under 5,000 records and clean CSV exports typically complete in 48–72 hours of clock time. Medium setups with 5,000–20,000 records, multiple custom fields, and staff-assignment mapping extend to 3–5 days. The slowest variable is SortScape's desktop-only export process for large datasets requiring pagination; your team must prepare these exports before migration begins. Complex setups with Xero invoice reference mapping and route-coordinate preservation add 1–2 days.

Adjacent paths

Related migrations to explore

Ready when you are

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