CRM migration
Field-level mapping, validation, and rollback between Dashcord and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Dashcord
Source
Twenty CRM
Destination
Compatibility
6 of 12
objects map 1:1 between Dashcord and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Dashcord to Twenty CRM is a cross-platform data migration with a structural twist: all Dashcord data lives inside a Salesforce org as standard CRM objects and custom Dashcord package objects. We authenticate into your Salesforce org via OAuth, introspect the active metadata via the Tooling API to discover Dashcord-specific custom fields and picklist values, then transform and load into Twenty's Company, People, and Opportunity model. Dashcord's lifecycle stages, lead scores, event records, and campaign attribution data require field-level mapping because neither Dashcord nor Twenty documents these mappings publicly. We do not migrate automations, event triggers, or campaign workflow rules; we deliver a written inventory of every active Dashcord workflow and event automation requiring rebuild in Twenty's Settings → Workflow section.
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 Dashcord 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.
Dashcord
Contact
Twenty CRM
People
1:1Dashcord Contacts map to Twenty People records. We read Contact records via the Salesforce API with all standard fields (Name, Email, Phone, Title, Address) plus any Dashcord-specific custom contact properties discovered during metadata introspection. The Twenty People record is created first so that any related Activities, Notes, or Tasks can be linked at migration time. Email serves as the dedupe key.
Dashcord
Account
Twenty CRM
Company
1:1Dashcord Accounts map to Twenty Companies. The Account Name becomes Company name, Billing Address migrates to the Company address fields, and Industry and Annual Revenue become custom or standard Company fields as applicable. Account is created before any related People import so the relationship is satisfied on insert.
Dashcord
Lead
Twenty CRM
People
1:1Dashcord Leads map to Twenty People records with a type distinction. We preserve the Lead Status and any Dashcord custom lead fields on the People record and flag the record source in a custom field for segmentation. The customer's team reviews the Lead-to-People boundary during scoping because Twenty has no separate Lead object; unqualified prospects live as People with a status property.
Dashcord
Campaign
Twenty CRM
Custom Object (Campaign equivalent)
lossyDashcord wraps Salesforce Campaigns for marketing automation. We export Campaign records and create a corresponding custom object in Twenty named Campaign (or the customer's preferred label) with fields for Campaign Name, Status, Type, Start Date, and Budget. Campaign Members map separately (see below). If the customer does not require campaign history preservation, we exclude Campaigns from migration scope to reduce complexity.
Dashcord
Campaign Member
Twenty CRM
Custom Object (CampaignMember equivalent)
lossyCampaign Members link Contacts and Leads to Campaigns with status and response tracking data. We create a Campaign Member custom object in Twenty with a Lookup to the Campaign custom object and a Lookup to the People record, plus fields for Status and Member Status. The relationship is resolved at migration time by loading Campaigns first, then People, then Campaign Members last so both parent lookups exist.
Dashcord
Opportunity
Twenty CRM
Opportunity
1:1If the Dashcord Salesforce org includes Opportunities (Enterprise tier or custom), we map them to Twenty Opportunities. Stage, Amount, Close Date, and Description migrate directly. The Pipeline and Stage values require a configuration step in Twenty's Settings to whitelist the imported stage names before migration, per Twenty's requirement that fields exist before CSV import.
Dashcord
Lifecycle Stage
Twenty CRM
Custom Field on People
lossyDashcord assigns lifecycle stage values (subscriber, lead, MQL, SQL, customer, etc.) stored as custom picklist or number fields on Lead and Contact. These have no direct Twenty equivalent — Twenty has no native lifecycle stage concept. We create a custom picklist field named Lifecycle Stage on the People object, populate it with the distinct Dashcord lifecycle values discovered during schema introspection, and migrate the raw stage value for each record.
Dashcord
Lead Scoring
Twenty CRM
Custom Field on People
lossyDashcord stores numeric or tiered lead scores as custom fields on Lead records. We create a custom number field Score on the People object, migrate the raw score value, and note the scoring model name or rule reference if stored in a separate Dashcord custom object. The scoring model itself (the rules that produced the score) is not migratable and must be rebuilt in Twenty or via an external scoring tool.
Dashcord
Event (Dashcord custom object)
Twenty CRM
Custom Object (Event)
lossyDashcord's event management module stores records as Salesforce custom objects whose schema varies by Dashcord package version. We discover the active event object name and field definitions during pre-flight metadata introspection, export the records, then create a matching custom object in Twenty named Event with fields for Name, Date, Type, Location, and any Dashcord-specific properties. Relationships to People (attendees) migrate as multi-select or linked records depending on the event model.
Dashcord
Email Activity
Twenty CRM
Task
1:1Dashcord tracks email sends, opens, and clicks via Salesforce Task and Email records. We export Tasks linked to Contacts and Leads where the Subject or Type indicates email activity, preserving the original timestamp, subject line, and body. The migrated Tasks attach to the corresponding Twenty People record via the email address match. Note that Dashcord's email marketing attribution (which campaign drove the send) requires a separate Campaign Member mapping if the customer needs campaign-level attribution preserved.
Dashcord
Attachment / ContentDocument
Twenty CRM
Attachment via custom field or link
1:1File attachments on Contact, Account, or Campaign records are stored in Salesforce ContentDocument and ContentDocumentLink. We export the file binary data and store it as a link or file reference on the corresponding Twenty People or Company record. Large file attachments (over 10 MB) require the customer's chosen Twenty hosting method to support the storage size; self-hosted deployments may need additional storage configuration.
Dashcord
Custom Dashcord Properties
Twenty CRM
Custom Fields
lossyAny custom fields added by Dashcord or created on top of the package are Salesforce custom fields. We read field metadata via the Salesforce Tooling API during pre-flight, enumerate all active custom properties on each object, create matching custom fields in Twenty's Data Model, then map the values during data migration. Undocumented or renamed Dashcord custom fields require manual enumeration during scoping because no public schema reference exists.
| Dashcord | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Lead | People1:1 | Fully supported | |
| Campaign | Custom Object (Campaign equivalent)lossy | Fully supported | |
| Campaign Member | Custom Object (CampaignMember equivalent)lossy | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Lifecycle Stage | Custom Field on Peoplelossy | Fully supported | |
| Lead Scoring | Custom Field on Peoplelossy | Mapping required | |
| Event (Dashcord custom object) | Custom Object (Event)lossy | Fully supported | |
| Email Activity | Task1:1 | Fully supported | |
| Attachment / ContentDocument | Attachment via custom field or link1:1 | Fully supported | |
| Custom Dashcord Properties | Custom Fieldslossy | 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.
Dashcord gotchas
No publicly documented API endpoint for Dashcord
Dashcord data model not independently documented
Salesforce Edition gating may restrict API access
No public pricing tiers means migration scoping has no self-serve reference
Small vendor elevates product discontinuation risk
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
Salesforce org authentication and metadata discovery
We authenticate into the customer's Salesforce org via OAuth using an API-enabled user account. We run a metadata introspection using the Salesforce Tooling API to enumerate all active Dashcord package custom objects, custom fields, and picklist values in the org. This discovery step identifies the event custom object (schema varies by Dashcord version), lifecycle stage field name and values, lead score field and any associated scoring model objects, and any custom properties added by the customer's Salesforce admin on top of the Dashcord package. The discovery output is a written schema inventory we use to design the Twenty destination schema.
Twenty workspace provisioning and schema design
We provision a Twenty workspace (self-hosted or cloud, per the customer's choice) and design the destination schema based on the discovered Dashcord Salesforce schema. This includes creating custom objects for Campaign and Campaign Member, creating custom fields for Lifecycle Stage and Score on the People object, creating the Event custom object with fields matching the discovered Dashcord event schema, and configuring Opportunity stage values if Opportunities are in scope. We configure picklist values for Lifecycle Stage using the distinct values found during Salesforce metadata discovery. Fields must exist in Twenty before any import begins; we complete this step before production migration.
Sandbox migration and schema validation
We run a full migration into a staging environment using production-like data volume extracted from the Salesforce org. The customer's team reconciles record counts (People, Companies, Opportunities, Events, Activities), spot-checks 25-50 records against the Salesforce source for field-level accuracy, and validates that the Lifecycle Stage and Score values populated correctly. Any field mapping corrections, picklist value mismatches, or custom object relationship issues surface here. We do not proceed to production migration until the customer signs off on the sandbox validation report.
Owner and user reconciliation
Dashcord stores record ownership through Salesforce User records. We extract every distinct OwnerId referenced on Contact, Account, Opportunity, and Activity records and match by email against the Twenty workspace's Members list. Any Dashcord owners without a matching Twenty user go to a reconciliation queue. The customer creates Twenty accounts for all active owners before the production migration begins. OwnerId references on imported records must resolve at insert time; unresolvable owners default to the migrating admin or are held for post-migration assignment.
Production migration in dependency order
We run production migration in record-dependency order: Companies (from Salesforce Accounts) first, then People (from Contacts and Leads with the lifecycle stage transform applied), then Opportunities, then Campaign and Campaign Member custom objects, then Event records, then Activity history (Tasks via Salesforce Bulk API 2.0 with chunking and parent-record resolution), then any remaining custom Dashcord properties. Each phase emits a row-count reconciliation report before the next phase begins. Dashcord lifecycle stage values and lead scores land in their corresponding Twenty custom fields during the People phase.
Cutover, validation, and automation inventory handoff
We freeze Salesforce org writes during cutover, run a final delta migration of any records modified during the migration window, then designate Twenty as the system of record. We deliver the Automation and Workflow Inventory document listing every active Dashcord automation (event triggers, lifecycle change actions, lead scoring rules) with a description of current behavior and a recommended Twenty Workflow rebuild approach. We do not rebuild Dashcord automations as Twenty Workflows inside the migration scope. We support a one-week post-cutover reconciliation window to address record-level issues raised by the customer's team.
Platform deep dives
Dashcord
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Dashcord and Twenty CRM.
Object compatibility
1 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
Dashcord: Salesforce API limits apply — determined by Salesforce Edition (Group/Professional editions are capped; Enterprise and above have higher limits).
Data volume sensitivity
Dashcord 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 Dashcord to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Dashcord 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 Dashcord
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.