CRM migration
Field-level mapping, validation, and rollback between SalezShark and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
SalezShark
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between SalezShark and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from SalezShark to Twenty CRM is a CSV-based migration rather than an API-based one. SalezShark does not publish a public API, which means all record extraction runs through manual or scoped CSV exports from the SalezShark UI. We coordinate with the customer to export Contacts, Leads, Accounts, Opportunities, Tasks, and Custom Fields in batches, normalise the field names and picklist values against SalezShark's tier-gated schema, and load into Twenty's corresponding objects. Twenty's standard objects are Company, Person, and Opportunity; any SalezShark custom objects require pre-creation in Twenty's Settings Data Model before import. We preserve the original enrichment data as static fields in Twenty rather than relying on re-enrichment, and we deliver a written Workflow Automations specification so the customer's admin can rebuild SalezShark Professional-tier automations in Twenty's workflow engine. Workflows, Custom Event Triggers, and marketing sequences do not migrate as code.
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 SalezShark 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.
SalezShark
Contact
Twenty CRM
Person
1:1SalezShark Contacts map to Twenty Person records. Standard fields (name, email, phone, address) have direct equivalents. We preserve any SalezShark enrichment data (company email format, employee headcount) as static custom fields on the Person record since Twenty has no native enrichment engine. Note: Twenty's Person object may lack some standard fields (job title, department, social profiles) out of the box per GitHub issue #13953 — we create these fields in Twenty's Data Model before import if the source data references them.
SalezShark
Lead
Twenty CRM
Person or Custom Lead Object
1:1SalezShark Leads with conversion scoring map to Twenty Person records. If the customer has a distinct lead qualification workflow, we create a custom Lead object in Twenty's Data Model before import and preserve the original SalezShark conversion score as a custom field. Leads that have been converted in SalezShark are treated as Person records with the original lead source preserved.
SalezShark
Account
Twenty CRM
Company
1:1SalezShark Accounts map directly to Twenty Company records. The company name becomes displayName, website maps to websiteUrl, and industry/size/revenue data from SalezShark custom fields map to custom fields created in Twenty's Data Model. Company is imported before Person to satisfy the relationship reference.
SalezShark
Opportunity
Twenty CRM
Opportunity
1:1SalezShark Opportunities map to Twenty Opportunity records. Pipeline stage names and order migrate as picklist values in Twenty's stage field. Deal value, close date, owner, and probability migrate directly. If SalezShark uses multiple pipelines, we create a custom pipeline field in Twenty and map stage names per pipeline to separate picklist value sets.
SalezShark
Pipeline
Twenty CRM
Custom Field (Stage + Pipeline)
lossySalezShark Pipelines do not have a direct Twenty equivalent. We export the pipeline configuration (pipeline name, stage list, stage order, stage probabilities) and recreate it in Twenty as a custom Opportunity pipeline field plus stage picklist values. The customer chooses a naming convention during scoping.
SalezShark
Task
Twenty CRM
Task
1:1SalezShark Tasks map to Twenty Task records. Task title, description, due date, status, priority, and owner assignment migrate directly. Task association (linked to Contact, Account, or Opportunity) resolves via the Person and Company name lookup at migration time. Completed-at timestamp migrates to a custom completedDate field if the standard Twenty task model does not include it.
SalezShark
Activity (Call, Email, Meeting, Note)
Twenty CRM
Task, Comment, or Custom Activity Object
1:1SalezShark engagement activities map to Twenty Task records for calls and tasks, Comment records for notes, and a custom Activity object for meeting and email history if the customer requires the full timeline preserved. The original SalezShark timestamp becomes the activity date in Twenty. Call duration and disposition migrate as custom fields.
SalezShark
Custom Field
Twenty CRM
Custom Field (Data Model)
lossySalezShark Custom Fields are exported as schema alongside records. We create each custom field in Twenty's Settings Data Model before import, matching the data type (text, number, date, select, multi-select, currency). Picklist values in SalezShark migrate as option values in Twenty's select or multi-select fields. Fields are pre-created before any data load.
SalezShark
Custom Object
Twenty CRM
Custom Object
1:1SalezShark Custom Objects (if any exist on the account) map to Twenty custom objects created via /metadata API. We define the object name, plural label, and all fields in Twenty's Data Model before migration. If the custom object has lookups to standard objects (Contact, Account, Opportunity), we resolve those references during the migration run using name-based lookup.
SalezShark
User (Owner)
Twenty CRM
WorkspaceMember
1:1SalezShark User records map to Twenty WorkspaceMember records by email address match. Owner assignments on Contacts, Accounts, and Opportunities migrate by resolving the SalezShark owner email to a Twenty WorkspaceMember. Any SalezShark owner without a matching Twenty user is held in a reconciliation queue; the customer's admin provisions the WorkspaceMember before record import resumes.
| SalezShark | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Lead | Person or Custom Lead Object1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Pipeline | Custom Field (Stage + Pipeline)lossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Activity (Call, Email, Meeting, Note) | Task, Comment, or Custom Activity Object1:1 | Fully supported | |
| Custom Field | Custom Field (Data Model)lossy | Fully supported | |
| Custom Object | Custom Object1:1 | Fully supported | |
| User (Owner) | WorkspaceMember1: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.
SalezShark gotchas
No publicly documented API for automated extraction
Minimum 10-user billing regardless of actual headcount
Workflow Automations are not executable at migration time
Custom Field schema varies by tier and by org configuration
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 export preparation
We audit the customer's SalezShark account across tier (Lite/Basic/Professional), active user count, record volumes (Contacts, Accounts, Opportunities, Tasks), pipeline configurations, custom field schema, and any active Workflow Automations. We identify which objects require CSV export and coordinate with the customer to run exports in batches, filtered by owner or date range to stay within UI export limits. The discovery output is a written migration scope, a CSV export checklist, and a confirmed active-seat count against SalezShark's minimum billing.
Twenty workspace provisioning and Data Model setup
We provision the Twenty workspace (cloud or self-hosted as the customer chooses) and create all custom fields and custom objects in Twenty's Settings Data Model before any data import. This step is critical: Twenty ignores CSV columns that do not match an existing field, so every SalezShark custom field must be pre-created with the correct type. We also create any custom Lead or Activity objects the customer requires to preserve their full record structure.
User provisioning and owner reconciliation
We extract every distinct SalezShark owner referenced on records and invite the corresponding team members to the Twenty workspace as WorkspaceMembers. Owner assignments migrate by email match. Any SalezShark owner without a matching Twenty user goes to a reconciliation queue for the customer's admin to provision before record import resumes. This step must complete before any record import because OwnerId references are required on most object imports.
CSV extraction and field mapping
We extract CSVs from SalezShark for each object: Accounts first (to establish the Company primary key), then Contacts (with Account name resolved), Leads, Opportunities (with Account and Owner references resolved), and Tasks. We build a field mapping document for each object that documents the source field name, target Twenty field, any format transformation (date formats, phone number normalisation, picklist value mapping), and any field that will become a custom field in Twenty.
Production import and reconciliation
We run production import in dependency order: Company (Accounts), Person (Contacts and Leads), Opportunity, Task, then Custom Objects. Each phase emits a row-count reconciliation report (records in source vs records loaded) and a spot-check of 25-50 records against the SalezShark source. Any mapping corrections happen before the next phase begins. If the customer has large task history (over 50,000 activity records), we chunk the import to avoid timeout.
Cutover, Workflow handoff, and post-migration support
We freeze SalezShark writes during cutover, run a final delta migration of any records modified during the window, then hand off Twenty as the system of record. We deliver the Workflow Automations and Custom Event Triggers as a written specification document so the customer's admin can rebuild in Twenty. We provide a one-week hypercare window for reconciliation issues. We do not rebuild SalezShark automations as Twenty workflows inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
SalezShark
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 SalezShark 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
SalezShark: Not publicly documented.
Data volume sensitivity
SalezShark 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 SalezShark to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your SalezShark 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 SalezShark
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.