CRM migration

Migrate from Dubsado to Twenty CRM

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

Dubsado logo

Dubsado

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Dubsado and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Dubsado to Twenty CRM is a schema redesign, not a record copy. Dubsado organizes data around Clients and Projects, with Invoices, Contracts, and Proposals as project-attached children. Twenty CRM uses the traditional Company-Person-Opportunity model with no native invoicing or contract execution. We resolve the Project-to-Opportunity mapping during scoping, carry Invoices and Contracts as line-item data within or alongside Opportunities, and document the proposal gap since Twenty has no native proposal object. Workflow automations, client portals, and Dubsado's built-in scheduler cannot migrate; we deliver a written inventory of every Workflow requiring rebuild in Twenty's automation layer. Email history stored in Dubsado's IMAP relay lives in the connected email account, not in Dubsado's database, and must be exported directly from the email provider before cutover.

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

Dubsado logo

Dubsado

What's pushing teams away

  • Steep learning curve and complex configuration requirements mean teams often spend weeks setting up the platform properly before it becomes productive.
  • Users report feeling locked in after importing their data, with migration paths that are not clearly documented or supported.
  • Per-user pricing tiers can escalate quickly — additional brands cost $10/month, and adding team members beyond the initial four requires fixed-tier upgrades.
  • Some users describe the interface as clunky and consider it overpriced relative to their business needs, particularly as their operations scale.
  • Workflow automations are platform-specific and cannot be exported, requiring complete manual rebuilding on any new destination platform.

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 Dubsado objects map to Twenty CRM

Each row shows how a Dubsado 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.

Dubsado

Client

maps to

Twenty CRM

Person (and optionally Company)

1:1
Fully supported

Dubsado Clients map to Twenty CRM Person records. We extract First Name, Last Name, Email (required), Phone, Company name, Address, and Internal Notes. Dubsado's Client-level Custom Fields map to Twenty CRM Person custom fields. Email is the dedupe key during import. If the Dubsado Client has a distinct Company name separate from the individual, we create both a Person and a Company record and link them via the WorkRawRelation object in Twenty. Client Portal access status does not migrate; it is documented as a post-migration configuration item.

Dubsado

Project

maps to

Twenty CRM

Opportunity

1:many
Fully supported

Dubsado Projects are the central container linking a Client to their service engagement. We map Projects to Twenty CRM Opportunities with Project Status translated to Opportunity Stage (Draft/In Progress maps to Negotiation, Completed maps to Closed Won or Closed Lost). Project creation date and description migrate to Opportunity fields. If a Dubsado Client has multiple active Projects, each becomes a separate Opportunity linked to the same Person. Project-level Custom Fields map to Opportunity custom fields. Note that Twenty does not have a native Project object; Project-specific deliverables and milestones require a custom object or task-based tracking.

Dubsado

Project Status

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

Dubsado's configurable Project statuses (Active, Completed, Archived, On Hold, etc.) map to Twenty CRM Opportunity stage values. We configure stage labels in Twenty to match Dubsado's status language during migration setup. Closed Won and Closed Lost stages in Twenty capture Dubsado's Completed and Archived statuses with the appropriate close date.

Dubsado

Contract

maps to

Twenty CRM

Custom Object or Opportunity field

1:1
Fully supported

Dubsado Contracts (with signature data, status, and timestamps) map to a custom Contract object we pre-create in Twenty CRM, or to Opportunity-level fields if the customer prefers a lighter schema. Contract template content (PDF body, field data) requires separate export and is attached to the custom Contract record as a file. Contract status (Sent, Signed, Declined, Expired) migrates as a custom picklist field. The actual e-signature document content does not migrate as searchable text; we attach the exported PDF and document the original signature timestamp.

Dubsado

Invoice

maps to

Twenty CRM

Custom Object or Opportunity field

1:1
Fully supported

Dubsado Invoices (ID, amount, status, due date, line items, payment records) map to a custom Invoice object we pre-create in Twenty CRM, or to Opportunity-level fields for simpler schemas. Invoice status (Paid, Unpaid, Partial, Overdue) migrates as a custom picklist. Recurring invoice schedules migrate as metadata on the custom Invoice object. Dubsado Payments transaction IDs are preserved for reconciliation. Note that Twenty has no native payment processing; invoices migrated are historical records only.

Dubsado

Proposal (Premier-tier)

maps to

Twenty CRM

Custom Object or Opportunity field

1:1
Fully supported

Dubsado Public Proposals (Premier-tier feature only) migrate as a custom Proposal object linked to the related Person and Opportunity. Proposal status (Draft, Sent, Viewed, Accepted, Declined) migrates as a custom picklist. The proposal content body (rich text with pricing tables) requires separate export and is stored as a text field or file attachment on the custom Proposal record. Proposals sent but not yet converted are flagged for manual follow-up post-migration.

Dubsado

Lead Capture Form

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Dubsado Form submissions (questionnaire responses linked to Projects) map to a custom FormSubmission object linked to the related Person. Field labels and values migrate as key-value pairs. Custom form field definitions from Dubsado's field builder map to field definitions on the custom FormSubmission object in Twenty. We capture form submission timestamp and source form name for attribution.

Dubsado

Custom Fields

maps to

Twenty CRM

Custom Fields

lossy
Mapping required

Dubsado Custom Fields on Clients and Projects are exported with type, label, and option definitions. We pre-create custom fields in Twenty CRM with type alignment: Dubsado text fields map to TEXT, dropdown options map to SELECT, multi-select maps to MULTI_SELECT, date fields map to DATE. Dropdown option values require manual review against Twenty's picklist constraints. Custom field values on existing records are migrated after the field schema is deployed.

Dubsado

Task

maps to

Twenty CRM

Task

1:1
Fully supported

Dubsado Tasks live within Projects and have assignees, due dates, and completion status. We export task records linked to their parent Project and map to Twenty CRM Tasks with the related Person or Opportunity (from the Project mapping) as the context record. Task status (Pending, Completed) maps directly. Full task history including completion timestamps is captured. Note that Twenty Tasks do not support sub-tasks natively; parent-child task hierarchies in Dubsado flatten to individual tasks with a custom parent reference field.

Dubsado

Time Entry

maps to

Twenty CRM

Custom Object or Task

1:1
Fully supported

Dubsado Time Entries (duration, date, linked Task ID, billable flag) map to a custom TimeEntry object linked to the related Task and Person. Billable time linked to invoices is cross-referenced with the Invoice mapping for reconciliation. Time entries without a billable flag or invoice link migrate as historical records only. Non-billable time tracking has no native equivalent in Twenty CRM and requires the custom object approach.

Dubsado

User / Team Member

maps to

Twenty CRM

User

1:1
Fully supported

Dubsado User accounts (name, email, role: Owner, Manager, Team Member) export with their role assignments. We match Dubsado users to Twenty CRM Users by email. Owner, Manager, and Team Member roles map to Twenty CRM role assignments post-migration. Note that Dubsado does not merge User and Contact data; team members who are also clients appear as both a User and a Client record and must be manually reconciled if deduplication is desired.

Dubsado

Canned Email Template

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Dubsado canned email templates (body content, subject lines, merge field syntax) export as text. We store them in a custom EmailTemplate object in Twenty CRM. Merge field syntax varies by destination; field mappings require per-template validation against Twenty's token format. Templates are reference material for manual rebuild rather than importable assets.

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.

Dubsado logo

Dubsado gotchas

High

No native API export for workflows blocks automation migration

Medium

CSV export scope requires per-status pagination

Medium

Inbox email history lives outside Dubsado

Low

Free tier limited to 3 clients blocks full migration testing

Low

Premier-tier features gate proposal and scheduler data

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

  • Dubsado has no documented public API for automated migration

    Dubsado does not publish a public REST API for data export. All migration work relies on Dubsado's built-in CSV export, which operates on one project status at a time with no 'export all' option. The UI requires selecting a status filter before the export button appears. We paginate through every status (Active, Completed, Archived, On Hold, and any custom statuses), deduplicate across exports, and reconstruct the full dataset. Accounts with more than five project statuses require additional sequencing time. The lack of API access also means there is no way to export Workflows, email history, or time entry data via automation; all of these require manual export or documentation.

  • Projects do not map 1:1 to any Twenty CRM object

    Dubsado's project-centric model has no direct equivalent in Twenty CRM's Company-Person-Opportunity structure. A Dubsado Project (which links a Client to Contracts, Invoices, Tasks, and Proposals) must be decomposed: the service relationship becomes an Opportunity, invoices become a custom Invoice object or Opportunity fields, and contracts become a custom Contract object. We handle this decomposition during scoping, but customers should expect their Dubsado Projects to appear as Opportunities in Twenty with invoice and contract data linked rather than embedded. If the customer relies on Dubsado Projects for deliverable tracking or milestone management beyond sales pipeline, a custom Project object in Twenty CRM requires separate schema design.

  • Dubsado Workflows cannot be migrated to Twenty automation

    Dubsado Workflows (trigger-action sequences: emails, tasks, status changes, form sends) are platform-specific and cannot be exported via any native tool or documented API endpoint. This is not a technical limitation we can work around — the data does not exist in an exportable format. We provide a Workflow Audit Template that maps every trigger, condition, and action for manual rebuild in Twenty CRM. Customers should expect to spend one to three days documenting their workflows before migration begins. Twenty's automation layer is still maturing and may not support all Dubsado Workflow patterns (particularly multi-branch conditional sequences) without custom development.

  • Twenty CRM has no native invoicing or payment processing

    Dubsado's integrated invoicing and Dubsado Payments (Stripe ACH, 0.8% fee cap) have no equivalent in Twenty CRM. Migrated invoices are historical financial records only. After migration, the customer must manage invoicing and payments through a separate tool (Stripe Invoice, QuickBooks, FreshBooks, or similar). We preserve invoice IDs, amounts, status, due dates, and line items as historical data in a custom Invoice object. Recurring invoice schedules are documented as metadata. Active unpaid invoices require manual follow-up before cutover to avoid duplicate billing.

  • Client Portal access flags do not migrate

    Dubsado Client Portal access (branded portal with per-client banners, access permissions, and portal-specific customizations) has no equivalent in Twenty CRM's data model. Portal access status and customizations cannot be exported or recreated automatically. We document portal configuration as a post-migration checklist item. Customers planning to maintain a client-facing portal experience must select and implement a separate portal solution (Twenty's upcoming features, a custom Experience Cloud build, or a third-party portal tool) after migration. Portal URL redirects from Dubsado to the new portal destination also require manual planning.

Migration approach

Six steps for a successful Dubsado to Twenty CRM data migration

  1. Discovery and export strategy

    We audit the Dubsado account across plan tier (Free/Starter/Premier), project status count, client volume, custom field definitions, active Workflows, and connected integrations (Stripe, QuickBooks, Calendly). We determine the export sequence based on project status count and identify any tier-gated data (Proposals require Premier). We request the customer to run per-status CSV exports from Dubsado, capture all invoice and contract records, and export email history directly from the connected IMAP account if needed. The discovery output is a written migration scope with record counts per status and a data export checklist.

  2. Schema design and object decomposition

    We design the destination schema in Twenty CRM. This includes creating custom objects for Contract, Invoice, Proposal, FormSubmission, and TimeEntry (or mapping these to Opportunity fields depending on the customer's preferred complexity). We map Dubsado Project Status values to Opportunity stage labels, pre-create all custom fields with type alignment, and design the Person-to-Company relationship rules based on whether Dubsado Clients have distinct company records. Schema is deployed to a Twenty CRM staging environment for validation before production migration begins.

  3. Data cleanup and deduplication

    We review the exported Dubsado data for duplicates (Clients with identical email addresses, Projects with identical names under the same Client), standardize address formats, and resolve any missing required fields. Email addresses are validated against standard format rules. We flag any records with missing email (Dubsado requires email on Clients) and present them to the customer for resolution. Records with incomplete Project data are flagged for manual review before import.

  4. Staging migration and reconciliation

    We run a full migration into Twenty CRM's staging environment using production-like data volume. The customer's admin reconciles record counts (Persons in, Companies in, Opportunities in, Tasks in), spot-checks 20-30 random records against Dubsado source data, and validates custom field values. Any mapping corrections happen in staging before production migration begins. This step also validates that the custom object relationships (Opportunity-to-Invoice, Person-to-Contract) display correctly in Twenty's UI.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Persons (with dedupe key on email), Companies (from Dubsado Client company names), Opportunities (from Dubsado Projects, with Person and Company lookups resolved), Tasks (linked to parent Opportunity), custom Contract records (linked to Person and Opportunity), custom Invoice records (with line items and payment status), custom Proposal records, FormSubmission records, TimeEntry records, and Custom Field values last. Each phase emits a row-count reconciliation report before the next phase begins. Dubsado's per-status CSV pagination means we process Projects in status batches and merge before the Opportunity import.

  6. Cutover, validation, and handoff documentation

    We freeze Dubsado writes during cutover, run a final delta migration of any records modified during the migration window, then designate Twenty CRM as the system of record. We deliver the Workflow Audit Template, the Contract and Invoice custom object setup guide, the Portal migration checklist, and the email export instructions. We support a one-week hypercare window where we resolve reconciliation issues. We do not rebuild Dubsado Workflows in Twenty CRM's automation layer inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

Dubsado logo

Dubsado

Source

Strengths

  • Purpose-built for creative service businesses, not generic CRM adapted from enterprise software.
  • Embedded scheduling with client self-booking reduces administrative overhead significantly.
  • Integrated payment processing with Stripe eliminates third-party payment gateway complexity.
  • Branded client portals create a polished experience from first inquiry through project completion.
  • Supports multiple billing models: hourly, project-based, flat-rate, retainer, and VIP day pricing.

Weaknesses

  • No native public API documentation or developer ecosystem for automated migrations.
  • Workflow automations are locked to the platform and cannot be exported, requiring full manual rebuild on any alternative.
  • Limited reporting and analytics compared to dedicated business intelligence tools.
  • No built-in project budget tracking or resource management for teams running multiple concurrent projects.
  • User permissions model is basic — no granular role-based access controls or field-level permissions.
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. 2 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 Dubsado and Twenty CRM.

  • Object compatibility

    B

    2 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

    Dubsado: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Dubsado 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 Dubsado to Twenty CRM data migrations

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

Can't find your answer?

Walk through your Dubsado to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 5,000 Clients and 2,000 Projects with standard field mappings and no complex custom field logic. Migrations with complex Custom Field definitions (multi-select dropdowns, conditional visibility), multi-brand Dubsado accounts, large invoice histories (over 10,000 line items), or multiple project statuses requiring CSV pagination move to seven to ten weeks. Discovery and data export alone takes one to two weeks because Dubsado's CSV export requires per-status pagination with no bulk export option.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dubsado.
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