CRM migration

Migrate from Dashly to Twenty CRM

Field-level mapping, validation, and rollback between Dashly and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Dashly logo

Dashly

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

objects map 1:1 between Dashly and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Dashly logo

Dashly

What's pushing teams away

  • G2 reviewers report that Dashly's interface is not intuitive, with a steep learning curve that makes basic tasks like editing workflows and navigating the inbox time-consuming.
  • Users encounter difficulties deleting records and contacts cleanly, leading to data clutter and frustration when attempting to maintain accurate contact databases.
  • The platform's editing workflow for conversations and automations is described as cumbersome, forcing support teams to work around UI limitations rather than through them.
  • Email deliverability and sending issues appear in negative reviews, with some users reporting that outbound email features fail without clear explanation or workaround.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Dashly objects map to Twenty CRM

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

maps to

Twenty CRM

People

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Task or Note

lossy
Fully supported

Dashly 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

maps to

Twenty CRM

Task body or Note

1:many
Fully supported

Dashly 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

maps to

Twenty CRM

Company

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Member

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Workflow (manual rebuild)

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Workflow (manual rebuild)

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Note or external document

1:1
Fully supported

Dashly 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

maps to

Twenty CRM

Multi-Select Picklist or Custom Field

lossy
Fully supported

Tags 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)

maps to

Twenty CRM

Custom Field on People

1:1
Fully supported

Custom 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).

Gotchas + challenges

What specifically takes care here

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 logo

Dashly gotchas

High

Visitor-based pricing affects migration scoping

High

No public bulk export endpoint

Medium

Leadbot and triggered message configs require manual rebuild

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Dashly has no bulk export endpoint

    Dashly's REST API does not expose a bulk export endpoint for any object type. Leads, Conversations, Messages, Companies, and Users must be retrieved via paginated GET requests with optional field inclusion parameters (include_{field_name}=true). We chunk requests per endpoint, page through results sequentially, and handle 429 rate-limit responses with exponential backoff. For accounts with large conversation histories, this adds time to the extraction phase. We advise customers to scope the migration window for API extraction before planning the full timeline.

  • Dashly is a CRM overlay, not a CRM

    Dashly explicitly positions itself as a conversational marketing layer that sits on top of an existing CRM rather than replacing one. Companies migrating to Twenty CRM from Dashly are moving from a live chat and lead capture tool to a full CRM. This means there may be gaps in the data model: Dashly does not store Opportunities, pipeline stages, or revenue data. We scope the migration against Twenty's data model during discovery and flag any CRM-native objects that do not exist in Dashly so the customer can plan data entry or import for those records post-migration.

  • Twenty requires custom fields before import

    Per Twenty's migration documentation, custom fields must be created in Settings → Data Model before any CSV import runs. Fields do not auto-create from import data. We create all custom fields (mapped from Dashly custom properties on Leads and Companies) during the schema design phase, before any data load begins. If the customer adds new Dashly custom properties during migration, those require a new field creation cycle before their values can load.

  • Twenty requires members invited before owner lookups resolve

    Twenty CRM resolves conversation assignees and lead owners by matching to Member records. Per Twenty's migration guide, Members must be invited and accept their invitation before OwnerId lookups can be satisfied during import. We extract every distinct assignee and owner from Dashly, match by email against the Twenty Members list, and hold any unresolved references in a reconciliation queue. The customer's admin provisions missing Members before record import resumes. We cannot proceed past Conversation and Lead import without this step completed.

  • Leadbots and Triggered Messages require manual rebuild

    Dashly Leadbots and Triggered Messages are automation configurations stored as JSON with trigger conditions, dialogue branches, and message sequences. We export these as structured JSON, but no destination CRM shares the same automation schema. Twenty CRM's Workflow model uses different trigger types (record-change, scheduled, manual) and action definitions. We deliver the exported config files and a written automation inventory with trigger descriptions and recommended Twenty Workflow equivalents, but the rebuild is manual and is not included in the standard migration scope.

Migration approach

Six steps for a successful Dashly to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Dashly logo

Dashly

Source

Strengths

  • All-in-one platform combining live chat, AI leadbots, triggered messaging, and knowledge base in a single tool.
  • Unlimited seats across all paid plans, making it cost-effective for growing support teams without per-user licensing.
  • Visitor-based pricing allows small teams to start at a low monthly cost with overage flexibility.
  • Built-in knowledge base with unlimited articles and SEO settings supports both agent reference and self-service content.
  • Offers a free trial and free Conversation starter plan for evaluation.

Weaknesses

  • G2 reviews consistently describe the interface as unintuitive with a steep learning curve for new users.
  • Deletion workflows are reported as problematic, making it difficult to remove stale records cleanly.
  • Email sending and deliverability features receive recurring complaints in negative reviews.
  • No documented bulk data export endpoint means migration requires API-based extraction or manual workarounds.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dashly and Twenty CRM.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Dashly: Not publicly documented.

  • Data volume sensitivity

    B

    Dashly doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Dashly to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Dashly to Twenty CRM data migrations

Answers to the questions buyers ask most during Dashly to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Straightforward migrations under 10,000 Leads, 2,000 Companies, and 50,000 Messages with no custom objects and no Knowledge Base export land between two and four weeks. Migrations with extensive conversation histories (over 200,000 Messages), multiple Leadbot configurations to inventory, custom objects requiring schema definition in Twenty, or parallel-knowledge-base export move to six to ten weeks because of paginated API extraction time, JSON config packaging, and the manual rebuild coordination for automations.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dashly.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day