CRM migration

Migrate from Reach to Twenty CRM

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

Reach logo

Reach

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

objects map 1:1 between Reach and Twenty CRM.

Complexity

BStandard

Timeline

2-3 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Reach logo

Reach

What's pushing teams away

  • The platform has no publicly documented API, forcing teams with complex migration needs to rely on manual exports and spreadsheet-based imports that are error-prone and slow.
  • When Reach updated its portal for managing chargebacks, it moved dispute tracking to email threads, requiring customers to manually organize communication history outside the system.
  • Some users report that the platform's customization options feel limited once their business processes scale beyond basic contact and content management.
  • Skip-trace and data-append features available in comparable tools are not present, leading teams focused on lead enrichment to seek alternatives.
  • Customers needing robust reporting and analytics report that Reach's built-in dashboarding is insufficient for executive-level visibility.

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

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

maps to

Twenty CRM

People

1:1
Fully supported

Reach 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

maps to

Twenty CRM

Company

many:1
Fully supported

No 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

maps to

Twenty CRM

Custom Fields (People, Company, Opportunity)

lossy
Mapping required

Reach 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

maps to

Twenty CRM

Multi-Select Picklist (People, Company)

lossy
Fully supported

Reach 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

maps to

Twenty CRM

Workspace Member (User)

1:1
Fully supported

Reach 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

maps to

Twenty CRM

Note + Attachment

1:1
Mapping required

Reach 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

maps to

Twenty CRM

Custom Object

1:1
Fully supported

If 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

maps to

Twenty CRM

Task, Event, Note (optional)

1:1
Fully supported

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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

If 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

maps to

Twenty CRM

Staging Documentation

lossy
Fully supported

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

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.

Reach logo

Reach gotchas

High

No public API documentation discovered

Medium

Export files expire after 7 days

Medium

Platform object schema is undocumented

Low

Multiple unrelated products share the Reach name

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

  • Reach has no documented API—extraction is manual

    The most critical pair-specific constraint is Reach's absence of a documented REST API or bulk export endpoint. We cannot programmatically pull data and must use Reach's manual CSV export feature. Where exports are incomplete or where the customer's data includes fields not visible in the standard export, we supplement extraction with screen-scraping or manual record review. This adds time and cost relative to API-based migrations and must be communicated during scoping. Export files expire seven days after generation; we schedule extraction to coincide with immediate download and staging so no data is lost.

  • Twenty requires custom fields before import

    Twenty's CSV import creates records, not fields. All custom fields must be created in Settings → Data Model before any import begins. We discover Reach's full schema (including custom properties) from the export column set and create the corresponding Twenty custom fields during the pre-migration phase. If the customer's Reach export reveals a field type that Twenty does not support (such as a complex multi-dimensional array), we document it for manual entry or a custom import script. Skipping this step results in records importing with missing custom fields and requires a re-import.

  • Reach schema is not publicly documented

    No public reference exists for Reach's field names, data types, or object relationships. The column names and types we infer from the export may not reflect Reach's internal schema. We validate our schema assumptions during extraction by comparing the full column set of each export against the baseline Reach contact export and against any knowledge-base screenshots available in research. Any column not matching a known standard is treated as custom. Schema changes in Reach after extraction require a new export cycle within the seven-day window.

  • Twenty has no native sequencing for sales cadences

    Reddit and community discussions confirm that Twenty CRM lacks native sequencing or sales engagement cadence features. If the customer used Reach for automated follow-up sequences, those do not migrate. We deliver a written inventory of any detected sequence logic (if present in the export data) for the customer to rebuild in a third-party sales engagement tool or document for manual execution. Twenty's workflow builder supports manual-trigger and time-delay actions but does not yet replicate the cadence model found in HubSpot Sequences or Outreach.

  • Views, workflows, and permissions require manual rebuild

    Twenty's own documentation explicitly states that Views, workflows, and permissions must be recreated manually after migration. We do not migrate Reach configurations as code. We deliver a written inventory of every detected Reach configuration (custom property sets, any implied workflow logic, user roles and permissions) mapped to the equivalent Twenty setting. The customer's Twenty admin rebuilds views, workflow triggers, and workspace permissions in Settings after data migration completes.

Migration approach

Six steps for a successful Reach to Twenty CRM data migration

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

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

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

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

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

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

Context on both ends of the pair

Reach logo

Reach

Source

Strengths

  • Highly rated user experience with short onboarding time reported across multiple review platforms.
  • Supports multi-screen content management with playlist functionality for teams managing visual communications.
  • Seat-based licensing with instant license reassignment on Enterprise tier reduces waste during team turnover.
  • Multi-currency support for international payment and transaction workflows.
  • Responsive account management team with hands-on support for customization and process improvements.

Weaknesses

  • No publicly documented REST API limits the ability to automate exports, integrations, or programmatic migrations.
  • Chargeback and dispute management was moved to email-based workflows, reducing visibility and traceability for financial operations teams.
  • Custom field and workflow customization is limited compared to more established CRM platforms.
  • Reporting and analytics capabilities are insufficient for teams requiring executive-level dashboards.
  • The platform's full object model and export schema are not publicly documented, requiring manual discovery for each migration project.
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 Reach 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

    Reach: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most migrations land between two and three weeks for accounts under 5,000 contacts with no confirmed company data, no custom objects, and no activity history. Projects with custom properties requiring schema discovery, company records stored as contact sub-properties, or media asset associations move to four to six weeks because of the extraction, validation, and custom object pre-creation phases. The manual extraction step (Reach's CSV export) adds a fixed time overhead that does not scale linearly with record count.

Adjacent paths

Related migrations to explore

Ready when you are

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