CRM migration
Field-level mapping, validation, and rollback between Results and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Results
Source
Twenty CRM
Destination
Compatibility
10 of 11
objects map 1:1 between Results and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Results to Twenty CRM is a migration with limited documentation on the source side and a well-documented open-source destination. Results does not publish a public API schema or confirmed field inventory, so our first step is always a scoped extraction feasibility call to determine what can be exported, in what format, and whether any custom objects or calculated fields exist. Twenty uses a clean entity model: People (for contacts), Company (for organizations), Opportunity (for deals), Task and Note (for activities), and supports custom objects via the /metadata API. We pre-provision Twenty Users before importing any records that carry an Owner reference, and we pre-create all custom fields in Settings before running the first import batch. Workflows, automations, and sequence logic do not migrate; we deliver a written inventory of every automation requiring rebuild so your admin can reconstruct them in Twenty's workflow builder post-migration.
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 Results 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.
Results
Contact
Twenty CRM
People
1:1Results Contact records map to Twenty People. The primary email address on the Contact becomes the People email field and serves as the dedupe key during import. Any first name, last name, phone, job title, or address fields map to their Twenty equivalents. We confirm the exact field inventory on the Results side during the scoping call because no public API schema is documented.
Results
Company
Twenty CRM
Company
1:1Results Company records map to Twenty Company. The domain or website on the Company becomes the Company domain field and is used for cross-referencing People records by domain. Company is created before any People import so that the relationship lookup is satisfied at the moment of People insert.
Results
Deal
Twenty CRM
Opportunity
1:1Results Deal records map to Twenty Opportunity. The deal stage maps to Twenty stage, and the pipeline assignment maps to a Twenty Record Type with a corresponding Sales Process configured before migration. Deal amount, close date, and probability migrate to their Twenty equivalents.
Results
Pipeline
Twenty CRM
Record Type + Sales Process
lossyEach Results deal pipeline becomes a Twenty Record Type on Opportunity with its own Sales Process that defines the valid stage values and probabilities. Stage names and ordering are preserved from Results, with the customer choosing whether to include or exclude closed-lost or stale stages from the target configuration.
Results
Owner
Twenty CRM
Workspace Member (User)
1:1Results Owner references on Contact, Company, Deal, and Activity records map to Twenty Workspace Members resolved by email match. We require the customer to invite and confirm all Users in Twenty before record migration begins, per Twenty's documentation requirement that users must exist before Owner lookups can resolve. Owners without a matching Twenty User go to a reconciliation queue.
Results
Custom Object
Twenty CRM
Custom Object
1:1Results custom objects migrate to Twenty custom objects of matching name. We create the destination schema in Twenty via Settings → Data Model and the /metadata API before any custom object data is imported. All custom fields, field types, picklist values, and lookup relationships are pre-configured. Any lookup fields referencing standard objects (People, Company, Opportunity) are validated against the existing import of those objects.
Results
Activity: Call
Twenty CRM
Task (TaskSubtype = Call)
1:1Results call activities map to Twenty Task records with the call subtype flagged. Call duration, disposition, and any recording URL stored in Results migrate to custom Task fields in Twenty. The activity timestamp preserves the original Results timestamp for timeline ordering.
Results
Activity: Email
Twenty CRM
Task
1:1Results email activities map to Twenty Task records. The email subject and body migrate to the Task body, linked to the related People or Company record. If Results stores email as a separate activity object, we map it to Task with the email body preserved in the body field and the timestamp used for timeline ordering.
Results
Activity: Meeting
Twenty CRM
Task
1:1Results meeting activities map to Twenty Task records. Meeting title, attendees, start time, and location migrate to the corresponding Task fields. The task is linked to the relevant People, Company, or Opportunity record via the Twenty relationship model.
Results
Activity: Note
Twenty CRM
Note
1:1Results notes (standalone note records or note-type activities) map to Twenty Note records linked via ContentDocumentLink to the parent People, Company, or Opportunity record. Rich text formatting is preserved where the Results export format supports it.
Results
Attachment
Twenty CRM
Attachment
1:1Attachments associated with Contact, Company, or Deal records in Results migrate as Twenty Attachments linked to the corresponding People, Company, or Opportunity record. File names and original upload timestamps are preserved. Attachments exceeding 25 MB are flagged for manual handling or alternative delivery.
| Results | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Record Type + Sales Processlossy | Fully supported | |
| Owner | Workspace Member (User)1:1 | Fully supported | |
| Custom Object | Custom Object1:1 | Fully supported | |
| Activity: Call | Task (TaskSubtype = Call)1:1 | Fully supported | |
| Activity: Email | Task1:1 | Fully supported | |
| Activity: Meeting | Task1:1 | Fully supported | |
| Activity: Note | Note1:1 | Fully supported | |
| Attachment | Attachment1: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.
Results gotchas
QuickBooks-linked records have dual sources of truth
Suite is not architected to scale beyond ~15 users / 15K contacts
No documented public REST API
Field Service photos and signatures require separate binary extraction
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
Extraction feasibility and data audit
We schedule a scoped extraction call to identify the viable export path from the Results instance. We audit all object types present (Contacts, Companies, Deals, Activities, Custom Objects), estimate record counts per object, and identify any custom fields, calculated fields, or restricted data. We document the Results field inventory and confirm with the customer which records meet the archival criteria for migration versus exclusion. The output is a written extraction plan and a preliminary object mapping sheet.
Twenty workspace provisioning
Before any data is imported, we provision the Twenty workspace with the required configuration. This includes inviting and confirming all Workspace Members who are referenced as Owners in the Results data, creating all custom objects in Settings → Data Model, and creating all custom fields on standard and custom objects with correct field types. We configure Record Types and Sales Processes corresponding to each Results pipeline and stage set. This step is a prerequisite; Twenty will not resolve Owner lookups on import if the User records do not exist.
Sandbox migration and reconciliation
We run a full migration into a Twenty Sandbox or a parallel workspace using production-like data volume. The customer's RevOps lead reviews record counts, spot-checks 25-50 records for field accuracy and relationship integrity, and verifies that People records are correctly linked to Companies and Opportunities are correctly linked to People and Companies. Any field mapping corrections, transformation rule adjustments, or schema modifications are made in this phase before production migration begins.
Owner reconciliation and User provisioning validation
We extract every distinct Owner referenced on Contact, Company, Deal, and Activity records from Results and match by email against the Twenty workspace's User table. Owners without a matching Twenty User are placed in a reconciliation queue. The customer's admin resolves the queue by either provisioning the missing Twenty User or remapping the Owner to an existing User. Migration does not proceed past this step because OwnerId references are required on most standard object imports.
Production migration in dependency order
We run production migration in record-dependency order: Workspace Members (validated), Companies (from Results Organizations), People (with CompanyId resolved from the Company import), Opportunities (with CompanyId and OwnerId resolved), Activity history (Tasks and Notes linked to People, Companies, and Opportunities), Custom Objects (last, with lookups to standard objects already resolved), and Attachments (linked to the parent record). Each phase emits a row-count reconciliation report before the next phase begins. We use batch processing with retry logic for any failed records.
Cutover, validation, and automation rebuild handoff
We coordinate a cutover window during off-peak hours, run a final delta migration of any records created or modified during the migration window, and switch the system of record to Twenty. We deliver the automation inventory document to the customer's admin team. We support a one-week hypercare window to resolve any reconciliation issues raised by the team during initial use. Workflows, sequences, and automations are not rebuilt inside the migration scope; that work is a separate engagement or an internal admin task.
Platform deep dives
Results
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Results and Twenty CRM.
Object compatibility
3 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
Results: Not publicly documented.
Data volume sensitivity
Results 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 Results to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Results 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 Results
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.