CRM migration
Field-level mapping, validation, and rollback between Dashly and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Dashly
Source
Twenty CRM
Destination
Compatibility
7 of 10
objects map 1:1 between Dashly and Twenty CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Dashly to Twenty CRM is a platform-type migration: Dashly is a conversational marketing and customer service layer that sits alongside a CRM rather than replacing one, while Twenty CRM is a full-featured open-source CRM with Companies, People, Opportunities, Tasks, and Custom Objects. The migration extracts Leads, Conversation threads with Messages, Company records, and User accounts via Dashly's paginated REST API (there is no bulk export endpoint), maps them to Twenty's equivalent objects, and loads via CSV import or API write. Leadbots and Triggered Message rules are exported as structured JSON but cannot auto-migrate because no destination shares the same automation schema; we deliver the config files and a mapping guide for manual rebuild. Knowledge Base articles export as structured content. Visitor session data is not migratable as it is aggregated and ephemeral in Dashly's analytics engine. Twenty requires custom fields to exist before import and users to be invited before owner lookups resolve, both of which we coordinate as part of the pre-migration workspace setup phase.
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 Dashly 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.
Dashly
Lead
Twenty CRM
People
1:1Dashly Leads map to Twenty CRM People records. Standard properties (name, email, phone, city) migrate directly. Custom Lead properties (custom_attributes in the Dashly API) require pre-creation as custom fields in Twenty Settings → Data Model before import; we inventory all custom properties during discovery, create the equivalent Twenty fields during the schema phase, then map values during load. The dashly_lead_id is preserved in a custom field for source reference and future sync.
Dashly
Conversation
Twenty CRM
Task or Note
lossyDashly Conversations are top-level threads with status, assignee, source channel, and timestamps. Each conversation maps to a Twenty Task record linked to the corresponding People record. Conversation status (open, resolved, pending) maps to Twenty Task status values. Assignee maps via email lookup to the Twenty User (member) who must be invited before import. Source channel and first-contact timestamp are preserved as custom fields on the Task.
Dashly
Message
Twenty CRM
Task body or Note
1:manyDashly Messages are embedded within Conversations. Each message records sender type (agent or visitor), body content, timestamp, and delivery channel. Messages are exploded from their parent Conversation into individual Task activity entries in Twenty, preserving thread order via the original timestamp. We maintain the participant attribution (agent name, visitor identifier) in the message body and a custom field for sender_type.
Dashly
Company
Twenty CRM
Company
1:1Dashly Company records (name, domain, industry, and custom properties) map directly to Twenty CRM Company records. The Company must exist before any Lead import that references it via the company association field. We resolve company lookups during the transform phase by matching domain or name against the Company table before Leads are loaded.
Dashly
User
Twenty CRM
Member
1:1Dashly User accounts (agents and admins with email, role, and availability) map to Twenty CRM Members. We resolve by email match. Per Twenty's migration documentation, Members must be invited and accept their invitation before Owner lookups can resolve on imported records. We flag any Dashly User without a matching Twenty Member for the customer's admin to provision before record import resumes.
Dashly
Leadbot
Twenty CRM
Workflow (manual rebuild)
1:1Dashly Leadbots are automation configs with trigger conditions, dialogue trees, and action sequences stored in JSON. We export each Leadbot configuration as structured JSON with its trigger rules, decision branches, and message sequences. There is no equivalent bot-builder in Twenty CRM, so we cannot auto-migrate these. We deliver the exported JSON config files with a mapping guide that describes the trigger conditions and recommended Twenty Workflow equivalents for the customer's admin to rebuild manually.
Dashly
Triggered Message
Twenty CRM
Workflow (manual rebuild)
1:1Dashly Triggered Messages define automated outbound sequences tied to visitor behavior or time delays. The trigger rules and message content are exported as structured automation data. We cannot auto-migrate these to Twenty because Twenty's Workflow model uses different trigger types and action definitions. We deliver a written inventory of every active Triggered Message with its behavioral trigger, audience conditions, message template, and a recommended Twenty Workflow configuration for the customer's admin to recreate.
Dashly
Knowledge Base Article
Twenty CRM
Note or external document
1:1Dashly Knowledge Base articles (title, body content, SEO settings, category associations) export as structured text with metadata. Twenty CRM has no native knowledge base module, so articles do not migrate as navigable pages. We export articles as formatted documents (HTML or Markdown) that the customer can host in their own documentation system or as Note records in Twenty for reference. Deep SEO field mapping is not applicable in Twenty's schema.
Dashly
Tag
Twenty CRM
Multi-Select Picklist or Custom Field
lossyTags applied to Leads, Conversations, or Companies in Dashly export as flat label arrays. We preserve all tag assignments and map them to Twenty custom fields configured as multi-select picklists or text fields, depending on the customer's tagging strategy decision during scoping. Tags used for conversation categorization map to Task tags; tags used for lead segmentation map to People custom fields.
Dashly
Custom Property (Lead)
Twenty CRM
Custom Field on People
1:1Custom fields defined on Dashly Leads are inventoried during discovery with their data types. We create the equivalent custom fields in Twenty Settings → Data Model before import begins. Per Twenty's migration documentation, fields must exist before import; we coordinate the schema creation sequence so that every Dashly custom property has a corresponding Twenty field ready at load time. Data type mapping follows standard conventions (text to text, number to number, date to date).
| Dashly | Twenty CRM | Compatibility | |
|---|---|---|---|
| Lead | People1:1 | Fully supported | |
| Conversation | Task or Notelossy | Fully supported | |
| Message | Task body or Note1:many | Fully supported | |
| Company | Company1:1 | Fully supported | |
| User | Member1:1 | Fully supported | |
| Leadbot | Workflow (manual rebuild)1:1 | Fully supported | |
| Triggered Message | Workflow (manual rebuild)1:1 | Fully supported | |
| Knowledge Base Article | Note or external document1:1 | Fully supported | |
| Tag | Multi-Select Picklist or Custom Fieldlossy | Fully supported | |
| Custom Property (Lead) | Custom Field on People1: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.
Dashly gotchas
Visitor-based pricing affects migration scoping
No public bulk export endpoint
Leadbot and triggered message configs require manual rebuild
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 inventory
We audit the Dashly account across all object types: Leads with custom properties, Conversations with Message counts, Company records, User accounts, active Leadbot configurations, Triggered Message rules, Knowledge Base article count, and tag taxonomy. We check the current visitor-based plan tier and flag any customer approaching their visitor quota before extraction begins. The discovery output is a written migration scope with record counts, custom property inventory, and automation inventory requiring manual rebuild.
Twenty workspace setup
We set up the Twenty CRM workspace before any data extraction from Dashly. This includes creating all custom fields in Settings → Data Model (mapped from the Dashly custom property inventory), creating any Custom Objects required, configuring People and Company field settings, and preparing the tag taxonomy as multi-select picklists. We also invite all expected Members by email so that the invitation acceptance step is complete before Owner lookups run. Per Twenty's documentation, Members must exist in Twenty before import data referencing them can resolve.
API extraction from Dashly with batch and backoff
We extract data from Dashly using paginated REST API requests. There is no bulk export endpoint. We request fields explicitly using include parameters, chunk requests per endpoint, and page through results sequentially. We handle 429 rate-limit responses with exponential backoff and retry. The extraction runs in dependency order: Users first (for owner resolution), then Companies, then Leads (with company associations resolved), then Conversations with Messages. We tag each record with the dashly_source_id for post-migration reconciliation.
Transform, deduplicate, and prepare import files
We transform the extracted Dashly data into Twenty's import format. Conversation threads are exploded into individual Task records per message, preserving thread order and participant attribution. Lead-Company associations are resolved against the extracted Company table. Tags are normalized to the multi-select picklist values defined in Twenty. Duplicate records (same email or domain) are flagged for the customer to resolve before import. We prepare separate CSV files per object type following Twenty's import requirements.
Test import into Twenty sandbox
We run a test migration into a staging environment (Twenty self-hosted instance or separate workspace) using production-like data volume. The customer reconciles record counts, spot-checks 25-50 records against the Dashly source, and validates that conversation thread order, owner assignments, and tag mappings are correct. We correct any field mapping issues before production migration. The test import also validates that all required custom fields exist and that Member invitations have been accepted.
Production migration and cutover
We run the production migration into the live Twenty instance in dependency order: Members (validated), Companies, People, Tasks from Conversations, Notes from Messages, then Custom Objects last. Each phase emits a row-count reconciliation report. We freeze Dashly writes during the cutover window, run a final delta extraction for any records modified during migration, and enable Twenty as the system of record. We deliver the Leadbot and Triggered Message config exports with the automation rebuild guide for the customer's admin to complete post-migration.
Platform deep dives
Dashly
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 Dashly 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
Dashly: Not publicly documented.
Data volume sensitivity
Dashly 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 Dashly to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Dashly 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 Dashly
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.