CRM migration
Field-level mapping, validation, and rollback between BenchmarkONE and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
BenchmarkONE
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between BenchmarkONE and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from BenchmarkONE to Twenty CRM is a platform-type migration: BenchmarkONE is a SaaS all-in-one CRM with bundled email marketing, while Twenty CRM is a self-hosted open source CRM built in TypeScript with full data ownership. The schema mapping centers on BenchmarkONE Contacts mapping to Twenty People, Companies mapping to Twenty Companies, Deals mapping to Opportunities, and Tags becoming either custom multi-select fields or Twenty Topics. The BenchmarkONE Temperature field (a lead-scoring proxy) has no native Twenty equivalent and is preserved as a custom number field. BenchmarkONE Automations and Email Campaigns are platform-native and do not migrate as data; we deliver a written inventory of active automations for the customer's admin to rebuild in Twenty or an alternative automation tool. The migration is scoped to data only, with user accounts and workspace permissions provisioned at the destination before any record import begins.
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 BenchmarkONE 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.
BenchmarkONE
Contact
Twenty CRM
Person
1:1BenchmarkONE Contacts map to Twenty People. All standard fields (firstName, lastName, email, phone, title, address, social profiles) map 1:1. The BenchmarkONE Temperature field (lead scoring proxy) has no native Twenty equivalent and is preserved as a custom number field temp_score__c. Contact Status maps to a custom single-select field contact_status__c. Lead Source maps to a custom field lead_source__c. Tags migrate as a comma-separated string field that we normalize into Twenty Topics after import.
BenchmarkONE
Company
Twenty CRM
Company
1:1BenchmarkONE Company records map directly to Twenty Company records. Company Name maps to displayName, Website maps to domainName, and the associated contacts are linked via the Twenty person-company relationship. We use domain as the dedupe key during import. The BenchmarkONE Account Company ID is preserved in a custom field benchmarkone_company_id__c for reconciliation.
BenchmarkONE
Deal
Twenty CRM
Opportunity
1:1BenchmarkONE Deals map to Twenty Opportunities. The pipeline stages map to Twenty Opportunity stage values that we configure before import. Deal amount, close date, and assigned sales rep transfer directly. Any custom deal fields become Twenty custom fields on the Opportunity object. We create the opportunity stage values in Settings → Data Model before migration begins.
BenchmarkONE
Task
Twenty CRM
Task
1:1BenchmarkONE Tasks linked to Contacts, Companies, or Deals map to Twenty Tasks. Due date, status, priority, and assignee transfer directly. Tasks are imported after their parent Contact or Company record exists in Twenty so that the relationship is satisfied at insert time. Task body migrates as a text field on the Task object.
BenchmarkONE
Tag
Twenty CRM
Topic (or custom multi-select field)
lossyBenchmarkONE tags are stored as comma-separated strings on Contact records. We split each tag list and create corresponding Twenty Topics via the Twenty API. The migration user chooses at scoping whether to use Topics (recommended for segmentation and filtering) or a custom multi-select field on Person (recommended if tag count is small or tags are used as labels rather than categories). This is a configuration decision made before import begins.
BenchmarkONE
Custom Fields
Twenty CRM
Custom Fields
lossyBenchmarkONE custom fields on Contacts and Companies are audited during scoping. Field definitions and values are included in the full database export. We pre-create matching custom fields in Twenty via Settings → Data Model before any record import. Field type mapping: BenchmarkONE text becomes Twenty text, date becomes date, number becomes number, checkbox becomes boolean, dropdown becomes select. Fields must exist in Twenty before the CSV import runs; Twenty's import creates records, not fields.
BenchmarkONE
User / Sales Rep
Twenty CRM
WorkspaceMember
1:1BenchmarkONE user accounts map to Twenty WorkspaceMembers. We extract every distinct owner referenced on Contacts, Companies, Deals, and Tasks and match by email against the Twenty workspace members list. Twenty requires that all users be invited and have accepted their invitations before owner lookups on imported records are satisfied. Missing users are held in a reconciliation queue; the customer's admin provisions them before the record import phase resumes.
BenchmarkONE
Social Profiles
Twenty CRM
Custom URL fields on Person
1:1BenchmarkONE stores social profile URLs (LinkedIn, Twitter/X, Facebook, etc.) on the Contact record. We map each social profile to a named URL field on the Twenty Person object. If the social platform is not a standard Twenty field, it is stored in a custom URL field named for the platform (e.g., linkedin_url__c).
BenchmarkONE
Email Campaigns
Twenty CRM
Not migrated (documented separately)
1:1BenchmarkONE email campaign metadata (name, send date, audience count) migrates as a written reference document, not as a live record. Twenty CRM has no native email campaign object. We preserve campaign names and send dates in a custom object email_campaign_ref__c so the customer's admin has an audit trail of what campaigns existed in BenchmarkONE. Actual campaign content, templates, and performance data (opens, clicks) do not migrate; these are reconstructed in the customer's chosen email marketing platform.
BenchmarkONE
Automations
Twenty CRM
Not migrated (documented separately)
1:1BenchmarkONE automations are platform-native workflow constructs triggered by form submissions, website visits, tag changes, or purchases. Twenty CRM does not have a native automation builder in v1. We document every active automation's trigger, conditions, and actions during discovery and deliver a written automation inventory with recommended equivalents (e.g., manual task creation, third-party automation tools, or custom scripts). This is a manual reconstruction step, not a data migration, and is scoped separately.
| BenchmarkONE | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Tag | Topic (or custom multi-select field)lossy | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| User / Sales Rep | WorkspaceMember1:1 | Fully supported | |
| Social Profiles | Custom URL fields on Person1:1 | Fully supported | |
| Email Campaigns | Not migrated (documented separately)1:1 | Mapping required | |
| Automations | Not migrated (documented separately)1: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.
BenchmarkONE gotchas
Admin-only database export locks down data access
Contact-tier pricing means record count directly impacts billing
Email sending limits are tied to plan tier, not contact count
API requires SSL and JSON media type with no documented rate limits
Automations are BenchmarkONE-native and require manual reconstruction at destination
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
Discovery and scoping
We audit the source BenchmarkONE account across all tiers, extracting record counts for Contacts, Companies, Deals, Tasks, Tags, and Custom Fields. We identify the active automations (trigger type, conditions, actions) and email campaign inventory. We verify admin access for the database export and confirm the total record volume to size the extraction sessions. We also audit the BenchmarkONE contact-tier plan to flag any pricing impact at the destination if the destination platform uses contact-based billing. The discovery output is a written migration scope with object mapping, a data-cleanup recommendation, and an automation inventory request.
Twenty workspace setup
Before any record import, we set up the Twenty workspace: we create all required custom fields on the Person, Company, and Opportunity objects via Settings → Data Model; we configure Opportunity stage values to match the BenchmarkONE pipeline stages; we create any custom objects referenced in the BenchmarkONE schema; and we document the tag-to-Topic mapping strategy. We then invite and provision all team members as WorkspaceMembers so that owner lookups are resolved at import time. Workspace setup in Twenty is done via the metadata API and validated in a staging pass before production migration begins.
Data export and cleaning
We export data from BenchmarkONE using the admin-only database export function. The CSV export covers Contacts, Companies, Deals, Tasks, Tags, and Custom Fields. We run a data-cleaning pass: duplicate contacts are flagged for merge before import, stale records (no activity in 24+ months) are excluded per migration scope, email addresses are validated for deliverability, and Temperature lead scores are isolated as a custom field rather than mapped to a non-existent native equivalent. BenchmarkONE's undocumented API rate limits mean we pace extraction requests and break large exports into chunked sessions.
Schema mapping and transform
We apply the field mapping transform: BenchmarkONE Contacts become Twenty People, Companies become Twenty Companies, Deals become Twenty Opportunities, and Tasks remain Tasks. The Temperature field is written to a custom number field temp_score__c. Tags are split from comma-separated strings and prepared for Topic creation. Lead Source is mapped to a custom field lead_source__c. Contact Status is mapped to contact_status__c. Any BenchmarkONE custom fields are matched to their Twenty counterparts created during workspace setup. Owner resolution is applied by email match against the pre-provisioned WorkspaceMember list.
Production migration in dependency order
We run production migration into Twenty in dependency order: WorkspaceMembers (pre-provisioned, validated), Companies (dedupe key is domain), People (with AccountId resolved from Company), Opportunities (with PersonId and CompanyId resolved and stage values matching pre-configured pipeline), Tasks (with PersonId or CompanyId resolved), then Tags converted to Twenty Topics. Each phase emits a row-count reconciliation report before the next phase begins. We use batch processing with error logging and retry for any records that fail validation. The customer spot-checks 20-30 random records against the source before sign-off.
Cutover and automation handoff
We freeze BenchmarkONE writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We deliver the automation inventory document to the customer's admin team, covering each BenchmarkONE automation's trigger, conditions, and recommended equivalent in Twenty or a third-party automation tool. We support a five-business-day hypercare window where we resolve any data issues raised by the customer's team. Workflows, email campaigns, and automations are out of scope for migration and are handled as a separate workstream.
Platform deep dives
BenchmarkONE
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 BenchmarkONE 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
BenchmarkONE: Not publicly documented.
Data volume sensitivity
BenchmarkONE 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 BenchmarkONE to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your BenchmarkONE 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 BenchmarkONE
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.