CRM migration
Field-level mapping, validation, and rollback between SalesCaptain and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
SalesCaptain
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between SalesCaptain and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from SalesCaptain to Twenty CRM is a migration from a narrow commercial SMB platform to an open-source CRM that ships free and self-hosted. SalesCaptain uses a flat data model with Leads, Companies, Conversations, and Custom Fields; Twenty uses a People-Companies-Opportunities-Activities schema with a /metadata API for custom objects. We map SalesCaptain's conversation threads to Twenty Activity records, preserve custom field schemas as Twenty custom fields, and resolve owner assignment by matching SalesCaptain users to Twenty workspace members by email. SalesCaptain does not expose a bulk export API or workflow definitions via API, so we poll endpoints in controlled batches and deliver a written Workflow Inventory for the customer's admin to rebuild in Twenty's settings. The AGPL-3.0 license on Twenty has no licensing cost implication for self-hosting but requires a legal review if the customer's own software product touches Twenty's codebase.
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 SalesCaptain 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.
SalesCaptain
Contact
Twenty CRM
Person
1:1SalesCaptain Contact records map directly to Twenty Person objects. The primary email, phone, name, and address fields map 1:1. We preserve the SalesCaptain contact's original created date and last_modified timestamp on the Twenty record for audit. Any SalesCaptain custom properties on a Contact map to Twenty custom fields on Person, which we pre-create via the /metadata API before migration begins.
SalesCaptain
Company
Twenty CRM
Company
1:1SalesCaptain Company records map 1:1 to Twenty Company objects. Domain name, address, industry, and employee count migrate directly. Company is imported before Person so that the Company-Person relationship is satisfied at Person insert time. We use the SalesCaptain company domain as the dedupe key if duplicate companies exist in the source.
SalesCaptain
Lead
Twenty CRM
Lead
1:1SalesCaptain Lead records map to Twenty Lead objects. Lead status, source, and score properties from SalesCaptain migrate as custom fields on the Twenty Lead since Twenty's native Lead model includes standard status and source fields. If the customer has qualified Leads in SalesCaptain that should become People-Company relationships in Twenty, we flag this during scoping and offer a Lead-to-Person convert step post-migration.
SalesCaptain
Deal
Twenty CRM
Opportunity
1:1SalesCaptain Deal records map to Twenty Opportunity objects. Deal name, amount, stage, expected close date, and owner migrate directly. The SalesCaptain deal pipeline maps to a Twenty pipeline that we configure before migration. Closed-won and closed-lost reasons from SalesCaptain custom properties become Twenty custom fields for loss and win analysis.
SalesCaptain
Conversation
Twenty CRM
Activity
1:1SalesCaptain conversation threads export as activity records with timestamps, participants (contacts or leads), direction (inbound or outbound), and message content. We map these to Twenty Activity records (calls, emails, tasks) with the body preserved as the activity note. Participant resolution uses email matching against the migrated Person and Lead records. This is the highest-risk mapping because SalesCaptain conversation threading does not map to a standard Twenty object type without enrichment.
SalesCaptain
Custom Field
Twenty CRM
Custom Field (Person, Company, Opportunity, Lead)
lossySalesCaptain custom field definitions export as JSON schemas alongside standard field values. We rehydrate custom fields in Twenty by calling the /metadata API to pre-create each field with the correct type (text, number, date, picklist, multi-select). Date-only fields from SalesCaptain that may import as datetime receive explicit type coercion during the transform phase. Multi-select picklist values are delimiter-normalized to match Twenty's format before insert.
SalesCaptain
Communication Channel Profile
Twenty CRM
Custom Field (Person)
1:1SalesCaptain channel profile data (phone numbers used for calling, messaging account identifiers) exports as metadata on the Contact. We map these to custom fields on the Twenty Person record (e.g., sms_phone__c, calling_number__c) rather than a native channel object since Twenty does not have a separate Communication Channel Profile concept. Channel-specific routing rules are flagged as configuration items for the customer's admin to review post-migration.
SalesCaptain
User/Team Member
Twenty CRM
WorkspaceMember
1:1SalesCaptain user records export with name, email, role, and assignment data. We match SalesCaptain users to Twenty WorkspaceMember records by email address. Any SalesCaptain user without a matching Twenty workspace member goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignment on migrated Deals and Leads is resolved at migration time using the User mapping.
SalesCaptain
Workflow/Automation Rule
Twenty CRM
None
1:1SalesCaptain workflow automation rules are not exposed via API and do not migrate. We deliver a Workflow Inventory worksheet during scoping that documents every active rule's trigger conditions, filter logic, and actions so the customer's admin can recreate them in Twenty's settings-based automation. This inventory is a required deliverable before cutover because losing automation rules without a documented replacement causes immediate process disruption.
SalesCaptain
Pipeline
Twenty CRM
Pipeline
lossySalesCaptain deal pipelines map to Twenty Pipeline configurations. Each SalesCaptain pipeline becomes a Twenty Pipeline with stage values migrated as stage entries. Stage probability percentages migrate from SalesCaptain to Twenty stage probability fields, rounded to the nearest integer. We configure the pipeline in Twenty's settings before Deal migration begins.
| SalesCaptain | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Conversation | Activity1:1 | Fully supported | |
| Custom Field | Custom Field (Person, Company, Opportunity, Lead)lossy | Fully supported | |
| Communication Channel Profile | Custom Field (Person)1:1 | Fully supported | |
| User/Team Member | WorkspaceMember1:1 | Fully supported | |
| Workflow/Automation Rule | None1:1 | Fully supported | |
| Pipeline | Pipelinelossy | 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.
SalesCaptain gotchas
No public bulk export API for high-volume migrations
Workflow automation rules do not export via API
Bearer token rotation requires re-authentication during migration
Limited custom field type support on import
No public API rate limit documentation
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 data audit
We audit the source SalesCaptain account across objects in use (Contacts, Companies, Leads, Deals, Conversations, Custom Fields), team member count, active workflow rules, and engagement volume. We extract a representative data sample to validate field-level types and identify picklist value sets that require explicit mapping. The discovery output is a written migration scope with object counts, a picklist mapping table, and the Workflow Inventory worksheet for the customer to complete before schema design begins.
Twenty schema design and custom field provisioning
We design the destination schema in Twenty. This includes configuring Pipelines and Stages, pre-creating custom fields via the /metadata API for every SalesCaptain custom property, and mapping SalesCaptain picklist values to Twenty picklist values explicitly. If the customer is self-hosting Twenty, we validate the deployment environment (Node.js version, database connectivity, environment variables including IS_SIGN_UP_DISABLED) before proceeding. Schema is validated in a staging environment before production migration begins.
Owner and user reconciliation
We extract every distinct SalesCaptain user referenced on Contact, Company, Deal, and Activity records and match by email against the Twenty workspace member list. Any SalesCaptain user without a matching Twenty workspace member is placed in a reconciliation queue. The customer's admin provisions the missing workspace members before record migration resumes. Owner assignment on migrated Deals and Leads cannot proceed until this step is complete because Twenty requires a valid workspace member reference.
Sandbox migration and validation
We run a full migration into a Twenty staging or sandbox environment using production-like data volume. The customer's team lead spot-checks 25-50 records against the SalesCaptain source, validates the picklist mapping results, confirms the activity timeline is legible, and signs off on the schema and field mapping before production migration begins. Any mapping corrections happen at this stage, not in production.
Production migration in dependency order
We run production migration in record-dependency order: Companies (foundation object), Persons (with Company relationship resolved), Leads (with workspace member resolved), Opportunities (with Company, workspace member, and Pipeline resolved), Activity records (via batch polling with retry logic, participant resolved by email match), Custom Fields (via /metadata pre-creation then data backfill). Each phase emits a row-count reconciliation report before the next phase begins. Workflow rules are documented separately and not migrated as code.
Cutover, validation, and workflow rebuild handoff
We freeze SalesCaptain 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 validate record counts across all object types and spot-check a second sample against the source. We deliver the Workflow Inventory document to the customer's admin team with recommendations for recreating each rule in Twenty's settings. We support a five-day hypercare window where we resolve any reconciliation issues. We do not rebuild SalesCaptain workflows in Twenty's settings; that work is scoped separately or handled by the customer's admin.
Platform deep dives
SalesCaptain
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 SalesCaptain 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
SalesCaptain: Not publicly documented.
Data volume sensitivity
SalesCaptain 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 SalesCaptain to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your SalesCaptain 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 SalesCaptain
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.