CRM migration
Field-level mapping, validation, and rollback between Reach and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Reach
Source
Twenty CRM
Destination
Compatibility
6 of 10
objects map 1:1 between Reach and Twenty CRM.
Complexity
BStandard
Timeline
2-3 weeks
Overview
The Reach-to-Twenty CRM migration is a manual, schema-discovery-driven project because Reach has no publicly documented REST API or bulk export endpoint. We extract Reach data through the platform's built-in CSV export, discover the full field column set at extraction time, and reconstruct the schema from the export output. We then pre-create every custom field in Twenty's Data Model before importing a single record, because Twenty's CSV import creates records only, not fields. We sequence the migration with People first (the Reach Contact equivalent), Company second, and tags or custom properties last. Activity history and engagement data do not migrate unless a full Reach export confirms their presence, because Reach's export documentation does not reference them. Views, workflows, and permissions do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Twenty's workflow builder.
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 Reach 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.
Reach
Contact
Twenty CRM
People
1:1Reach Contact records map to Twenty People. Reach does not publish a field schema, so we capture the full column set from the CSV export during extraction and treat any column beyond name, email, and phone as custom. Email address is the dedupe key for People import. The Reach contact record type is preserved as a custom field reach_record_type__c on People for audit. We resolve any Reach Owner references by email match to Twenty workspace members before importing, because Twenty requires linked users to exist before owner lookups can resolve.
Reach
Company
Twenty CRM
Company
many:1No distinct Company or Account object was found in Reach documentation or reviews. If the customer's Reach instance contains company data, it is stored as contact sub-properties or free-text fields on the Contact record. We extract those columns, identify unique company names, and merge them into Twenty Company records before importing the People that link to them. The N:1 merge is resolved at extraction time by deduplicating on the inferred company name column. If no company data is present in the export, this step is omitted and People are imported without Account associations.
Reach
Custom Properties
Twenty CRM
Custom Fields (People, Company, Opportunity)
lossyReach custom properties are discovered by comparing the full CSV export column set against a baseline Reach Contact export. Each discovered column not matching a known standard field is treated as custom. Before migration, we create each custom field in Twenty via Settings → Data Model, selecting the matching Twenty field type (text, number, date, select, multi-select, currency, phone, url). Field creation must precede record import because Twenty's CSV import creates records only. API names for imports are retrieved by enabling Advanced mode in Settings per Twenty's documentation.
Reach
Tags / Labels
Twenty CRM
Multi-Select Picklist (People, Company)
lossyReach tag-equivalent columns (implied by content management workflows in reviews) are extracted as distinct values from the export. We create a multi-select picklist field in Twenty's Data Model, populate the picklist options with the extracted unique values, and map each contact's tag column to comma-separated values in the multi-select field during import. If tags are stored as separate rows (one tag per contact per export row), we aggregate by contact email before import.
Reach
User / Team Member
Twenty CRM
Workspace Member (User)
1:1Reach Enterprise seat-license user records (name, email, role status) map to Twenty workspace members. We extract all users from the Reach export who are referenced as owners on any record and match them by email against Twenty's member list. Any Reach user without a corresponding Twenty account is held in a reconciliation queue. The customer's Twenty admin provisions missing users before record import begins, because Twenty requires linked users to exist before owner or assignee lookups can be satisfied on People and Opportunity records.
Reach
Media Content
Twenty CRM
Note + Attachment
1:1Reach playlists and screen management content referenced in reviews suggest media assets tied to contacts or accounts. We extract any URL or file-reference columns from the export and import them as Twenty Note records with a reach_media_type__c custom field set to Playlist, Screen, or Media. File attachments migrate as Twenty Attachment records linked to the nearest People or Company record. Media asset files themselves (if hosted within Reach) cannot be extracted without API access; we flag these for manual handoff and document the Reach screen or playlist names for the customer to re-enter in Twenty.
Reach
Custom Object
Twenty CRM
Custom Object
1:1If the customer's Reach instance contains custom object records (identified during schema discovery from the full export column set), we create equivalent custom objects in Twenty via the /metadata GraphQL API. The object name, field names, and field types are inferred from the export columns and validated against Twenty's supported field types. Lookup relationships to People or Company are created as Relation fields pointing to the target object. Custom objects are migrated last in the sequence because they frequently contain lookup references to records imported in earlier phases.
Reach
Activities / Engagements
Twenty CRM
Task, Event, Note (optional)
1:1Reach's export documentation does not reference activity history, call logs, engagement timestamps, or note records as separate exportable objects. We do not migrate activity data unless a full column export confirms its presence. If the customer's Reach export includes a visible activity column or related table, we treat it as a custom property and migrate it as a text or multi-select field on the associated People record rather than as a native Twenty Activity. Customers requiring full activity timeline migration should evaluate whether Reach stores this data outside the exportable schema before proceeding.
Reach
Pipeline
Twenty CRM
Opportunity
1:1If the Reach export includes deal, opportunity, or pipeline columns, these map to Twenty Opportunity records. We create the Opportunity object in Twenty with standard fields (name, amount, close date, stage, probability) and any pipeline-specific custom fields discovered in the export. The Twenty Opportunity stage values are configured in Settings before import. Stage probabilities migrate as percentage values matching the source.
Reach
Export Metadata
Twenty CRM
Staging Documentation
lossyReach export files expire seven days after generation. We document the complete schema of each export (column names, inferred data types, unique value counts, null rates) in a migration data dictionary delivered to the customer. This dictionary serves as the authoritative schema reference for the migration and for any future admin who needs to understand the Reach data structure. Any column not migrated to a standard Twenty field is documented with its original Reach column name and recommended disposition.
| Reach | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Companymany:1 | Fully supported | |
| Custom Properties | Custom Fields (People, Company, Opportunity)lossy | Mapping required | |
| Tags / Labels | Multi-Select Picklist (People, Company)lossy | Fully supported | |
| User / Team Member | Workspace Member (User)1:1 | Fully supported | |
| Media Content | Note + Attachment1:1 | Mapping required | |
| Custom Object | Custom Object1:1 | Fully supported | |
| Activities / Engagements | Task, Event, Note (optional)1:1 | Fully supported | |
| Pipeline | Opportunity1:1 | Fully supported | |
| Export Metadata | Staging Documentationlossy | 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.
Reach gotchas
No public API documentation discovered
Export files expire after 7 days
Platform object schema is undocumented
Multiple unrelated products share the Reach name
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
Export scheduling and schema discovery
We schedule the Reach manual export during a discovery call with the customer present, so we can download the output immediately. Reach export files expire after seven days, so we run extraction and download in the same session. We capture every column in the export as our schema baseline, compare it against a standard Reach contact export to identify custom properties, and document the full column set in a migration data dictionary. If the customer has multiple Reach workspaces or subdomains, we confirm the exact product and portal URL to ensure the correct knowledge base and export procedures apply.
Twenty workspace preparation
We create the Twenty workspace by setting up the data model before any records are imported. This includes creating all standard objects (People, Company, Opportunity) if not already present, creating custom fields in Settings → Data Model for every custom property discovered in the Reach export, configuring picklist options for any tag-equivalent fields, and setting default currency and country codes for phone and address fields. We also configure the Opportunity stage values to match any pipeline columns found in the Reach export. This step cannot be skipped because Twenty's CSV import creates records only.
User provisioning and owner reconciliation
We extract every distinct Reach user referenced as an owner or assignee on any exported record and match them by email against Twenty's workspace member list. Any Reach user without a corresponding Twenty account is held in a reconciliation queue. The customer's Twenty admin provisions missing workspace members before record import begins, because Twenty cannot resolve owner or assignee lookups on People, Company, or Opportunity records if the linked user does not exist. This step gates all subsequent record imports.
Staging migration and schema validation
We run a full migration into Twenty using the extracted Reach data in staging order: Companies first (if company data exists in the export), then People, then Opportunities, then custom objects. We validate record counts, spot-check 25-50 random records against the source export, and confirm that custom field values are populated correctly. Any mapping corrections, missing field creations, or picklist value additions happen in this phase before the production migration begins. The customer reviews the staging output and signs off before we proceed.
Production migration and cutover
We run production migration in record-dependency order: Companies, People (with AccountId resolved), Opportunities (with CompanyId and OwnerId resolved), custom objects, and tags. Media asset references migrate as Notes with reach_media_type__c set. Each phase emits a row-count reconciliation report. We freeze Reach writes during cutover, run a final delta migration of any records modified during the window, and enable Twenty as the system of record. We do not migrate Reach workflows, sequences, or configurations as code.
Configuration inventory and admin handoff
We deliver a written inventory of every Reach configuration requiring rebuild in Twenty: custom views, any detected workflow logic, user roles and permissions, media asset names for manual re-entry, and sequence logic (if present). We support a one-week hypercare window where we resolve any data reconciliation issues raised by the customer's team. We do not rebuild Reach workflows or automations as Twenty workflow triggers inside the migration scope; that is a separate engagement. Post-migration admin configuration work (views, permissions, automations) is the customer's responsibility unless separately scoped.
Platform deep dives
Reach
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 Reach 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
Reach: Not publicly documented.
Data volume sensitivity
Reach 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 Reach to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Reach 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 Reach
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.