CRM migration
Field-level mapping, validation, and rollback between D-Tools and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
D-Tools
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between D-Tools and Twenty CRM.
Complexity
CModerate
Timeline
5–10 business days
Overview
D-Tools organizes around projects, locations, and line items for low-voltage system integrators — it tracks proposals, job costing, and service plans but does not function as a traditional contact CRM. Twenty CRM is a modern open-source CRM built around People, Companies, and Opportunities with Kanban pipeline views, REST/GraphQL API access, and a customizable data model. The migration translates D-Tools' project, client, location, and item structure into Twenty's relational objects while handling the data-model divergence between a project-centric and contact-centric architecture. We export D-Tools data via their REST API (120 requests per minute, 10,000 per day) including custom fields on items and clients. All records, timestamps, and owner emails transfer into Twenty. D-Tools workflow rules, integration connections, invoice records, and service-plan billing logic have no Twenty equivalent — we document these for manual rebuild and flag them in the pre-migration plan. The cutover uses a scoped-read delta window so your team keeps working in D-Tools until go-live.
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 D-Tools 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.
D-Tools
Client
Twenty CRM
Company
1:1D-Tools Clients map directly to Twenty Companies. We map Client_Name to Company name, Client_Address fields to address fields, and Client_Phone to the primary phone on the Company record. For Clients with multiple contacts, the primary contact becomes the Company point-of-record and others migrate as related People records.
D-Tools
Contact (under Client)
Twenty CRM
Person
1:1D-Tools contacts attached to a Client migrate as Twenty People records linked to the corresponding Company via companyId. D-Tools stores contact name, email, phone, and job title; these map to Twenty's standard name, email, phone, and jobTitle fields. Custom contact fields become custom fields on the Person object in Twenty's data model.
D-Tools
Item
Twenty CRM
Custom field on Opportunity (or Custom Object)
1:1D-Tools Items are product-or-service line items used inside proposals and projects. Twenty has no native product catalog object on the free or Pro tiers. We map Item_Name to a custom_text field and Item_Price, Item_Cost, and Item_SKU to custom_number fields on the Opportunity. For complex item catalogs, we create a Product custom object in Twenty linked to Opportunities by item ID.
D-Tools
Proposal
Twenty CRM
Opportunity
1:1D-Tools Proposals are scoped to a project and contain line items, pricing, and status. We map Proposal_Name to Opportunity name and Proposal_Value to a custom_number field (Twenty does not have a native deal amount field). Proposal status (Draft, Sent, Accepted, Lost) maps to Opportunity stage name, with a custom field preserving the original D-Tools proposal ID for traceability.
D-Tools
Project
Twenty CRM
Opportunity
1:1D-Tools Projects track the full lifecycle of an installation job — scope, locations, items, and status. Projects map to Twenty Opportunities where Project_Name becomes Opportunity name and Project_Value becomes a custom_number deal-amount field. Project status (In Progress, On Hold, Completed) maps to Twenty's opportunity stage values, which are configurable in Settings → Data Model before import.
D-Tools
Location
Twenty CRM
Custom Object (Location)
1:1D-Tools Locations organize items and scope within a project — a site address or room in a building. Twenty has no native Location object. We create a Location custom object with fields for name, address, and a relation to the Company (or Opportunity). Locations attach to Opportunities through a custom junction relation so project-level location context is preserved in Twenty's Kanban view.
D-Tools
Service Plan
Twenty CRM
Custom Object (Service Plan)
1:1D-Tools Service Plans track recurring service agreements with billing frequency and price. Twenty has no native recurring-billing object. We create a ServicePlan custom object with fields for plan name, billing frequency, monthly/yearly price, and a relation to the associated Company record. Service plan IDs and original terms are preserved as custom fields.
D-Tools
Invoice / Payment Record
Twenty CRM
Custom Object (Invoice) or Note
1:1D-Tools Invoice records (generated from projects and proposals) have no direct equivalent in Twenty CRM. We preserve invoice data — invoice number, amount, date, and status — as a custom Invoice custom object linked to the Opportunity or Company. If the invoice count is low, we attach invoice summaries as Notes on the relevant record instead of creating a full custom object.
D-Tools
Workflow Rule
Twenty CRM
Twenty Workflow Builder
1:1D-Tools workflow rules fire notifications or actions when entity criteria are met. Twenty's Workflow Builder handles automations but the logic cannot be migrated automatically. We export D-Tools workflow definitions (criteria, actions, triggers) as a rebuild-reference document for your Twenty admin. Workflows must be manually recreated in Twenty's Settings → Workflows after migration.
D-Tools
Owner / Creator (user reference)
Twenty CRM
WorkspaceMember
1:1D-Tools stores a user reference (owner, creator) on Projects, Proposals, and Items. Twenty WorkspaceMembers are matched by email — the Owner_Email field on each D-Tools record is resolved against Twenty's member list. Unmatched owners are flagged before migration so your team can invite them to Twenty first or assign a fallback owner. No record lands in Twenty without a resolved owner.
D-Tools
Custom Field (Item-level)
Twenty CRM
Custom field on Product or Opportunity
1:1D-Tools supports custom fields on Items, Clients, Projects, and Locations. Each custom field must be pre-created in Twenty's Settings → Data Model before import. We export the custom field schema from D-Tools, map field types (text, number, date, select) to Twenty field types, and include the creation step in the migration plan. Fields that do not yet exist in Twenty are created first; then the import runs.
D-Tools
Attachment / File
Twenty CRM
Custom field (URL) or Note attachment
1:1D-Tools files attached to projects, items, or clients migrate as Twenty Notes attached to the corresponding record. File names and storage URLs are preserved in the Note body. Inline images and embedded documents are downloaded and reattached as Note files in Twenty. D-Tools' native file storage is not transferred — URLs stored as text fields point to D-Tools-hosted files until you migrate file storage separately.
| D-Tools | Twenty CRM | Compatibility | |
|---|---|---|---|
| Client | Company1:1 | Fully supported | |
| Contact (under Client) | Person1:1 | Fully supported | |
| Item | Custom field on Opportunity (or Custom Object)1:1 | Fully supported | |
| Proposal | Opportunity1:1 | Fully supported | |
| Project | Opportunity1:1 | Fully supported | |
| Location | Custom Object (Location)1:1 | Fully supported | |
| Service Plan | Custom Object (Service Plan)1:1 | Fully supported | |
| Invoice / Payment Record | Custom Object (Invoice) or Note1:1 | Fully supported | |
| Workflow Rule | Twenty Workflow Builder1:1 | Fully supported | |
| Owner / Creator (user reference) | WorkspaceMember1:1 | Fully supported | |
| Custom Field (Item-level) | Custom field on Product or Opportunity1:1 | Fully supported | |
| Attachment / File | Custom field (URL) or Note attachment1: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.
D-Tools gotchas
Dual product API split (Cloud vs. SI) requires product identification first
i3 Product Library is a platform resource, not user data
GetClients API caps at 500 records per request with pagination required
Service plan dynamic pricing rules must be manually reconstructed
Custom report definitions do not transfer between D-Tools instances
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
Audit D-Tools data model and export all entities via REST API
We connect to your D-Tools Cloud REST API using your API credentials and extract every entity: Clients, Contacts, Projects, Proposals, Items, Locations, and Service Plans. We pull the custom field schema per entity so we know every field that needs to exist in Twenty before import. If your D-Tools account has more than 10,000 records, we split extraction into day-staggered batches respecting the 120 req/min and 10,000 req/day rate limit. The output is a set of CSVs organized by entity, plus a schema JSON describing each custom field's type, label, and pick-list values.
Map owners by email to Twenty WorkspaceMembers
D-Tools stores an owner or creator user reference on Projects, Proposals, and Items — these are email addresses or user IDs. Twenty WorkspaceMembers are the equivalent of users. We run an email-match against your Twenty workspace: any D-Tools user whose email corresponds to an active Twenty WorkspaceMember gets their records assigned to that member. Unmatched owners are flagged and reported — your team either invites them to Twenty first or assigns a fallback owner. No record lands in Twenty without a resolved owner or a documented fallback.
Create custom objects and fields in Twenty's data model before import
Before any data moves, we create the schema that does not yet exist in Twenty: a Location custom object (linked to Companies), a ServicePlan custom object (linked to Companies), and any custom fields on Person, Company, and Opportunity that correspond to D-Tools custom fields (Item IDs, Proposal IDs, project values, billing frequency, and similar). This step follows Twenty's documented process: Settings → Data Model → Add Field, selecting the correct type (text, number, date, select). We create all fields first, then validate the schema against the D-Tools field list before running the import.
Import in dependency order: Companies → People → Opportunities → Custom objects
Twenty requires the 'one' side of relationships to exist before the 'many' side can reference them. We sequence the import as: (1) Companies — because People and Opportunities link to them; (2) People — linked to Companies via companyId; (3) Opportunities — linked to Companies and People via companyId and personId; (4) Location and ServicePlan custom objects — linked to Companies. Items are stored as custom fields on Opportunities rather than as separate objects. D-Tools workflow rules and integration connections are not imported — we export them as a rebuild-reference document for your Twenty admin.
Run sample migration with field-level diff and validate mapping
A representative slice of records (typically 100–300 across all entity types) migrates first. We generate a field-level diff: for each record, we compare every source field value against the corresponding Twenty field value and flag any fields that were skipped, truncated, or mapped incorrectly. The diff report is shared with your team for verification. You confirm that D-Tools custom fields are rendering correctly, that owner resolution by email is accurate, and that Opportunity stage mapping matches your configured Twenty pipeline. No full migration runs until you sign off on the sample results.
Execute full migration with scoped-read delta window and rollback hold
The full D-Tools dataset migrates into Twenty with all field mappings, custom objects, and owner resolution applied. During cutover, FlitStack AI holds scoped read access to D-Tools — your team continues working in D-Tools without interruption. A delta-pickup window (24–48 hours) captures any records created or modified in D-Tools after the full migration snapshot runs. An audit log records every operation. One-click rollback is available for 48 hours after go-live if reconciliation reveals mapping errors or data gaps.
Platform deep dives
D-Tools
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across D-Tools 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
D-Tools: 120 API calls per minute and 10,000 API calls per day per key.
Data volume sensitivity
D-Tools 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 D-Tools to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your D-Tools 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 D-Tools
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.