CRM migration
Field-level mapping, validation, and rollback between D-Tools and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
D-Tools
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between D-Tools and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
D-Tools is purpose-built for low-voltage system integrators — its data model centers on Clients, Contacts, Projects, Locations, and an Integrated Product Library, with workflow automation rules that fire on field changes. D-Tools exposes data via a cloud API (120 calls/min, 10,000 calls/day) and CSV/XML export. Odoo CRM models the same real-world entities using crm.lead (which can be converted to opportunity), res.partner for contacts and companies, and crm.stage for pipeline stages, with custom fields named using Odoo's x_ prefix convention. The migration challenge is threefold: D-Tools' project-centric structure has no 1:1 Odoo equivalent, the integrated product library must be preserved as custom opportunity fields, and workflow rules cannot be transferred — they must be rebuilt using Odoo Studio automations after data lands. FlitStack AI sequences the export (respecting D-Tools API rate limits), creates the required custom fields on Odoo's target models, and runs a delta-pickup window (24–48 hours) so in-flight project changes during cutover are captured before 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 Odoo 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
Odoo CRM
res.partner
1:1D-Tools clients map to Odoo res.partner records in company mode. Client name, address, phone, and website export from D-Tools and land as fields on the Odoo partner record. D-Tools does not have a separate company/contact split — we create a primary res.partner in company mode and attach contacts as child partner records.
D-Tools
Contact
Odoo CRM
res.partner (contact)
1:1D-Tools contacts export with name, email, phone, and title. Each contact maps to a res.partner in individual mode linked to the parent client partner. D-Tools primaryContact flag determines the commercial partner_id on opportunities. Email addresses are used to resolve Odoo user/owner assignments during migration.
D-Tools
Project
Odoo CRM
crm.lead (opportunity)
1:1D-Tools projects are the richest data container — project name, value, status, phases, change orders, and job-costing data. Odoo has no project-management object in CRM alone. We map each D-Tools project to a crm.lead in the Convert to Opportunity state and create Odoo custom fields (x_dtools_project_id, x_project_value, x_project_status, x_project_start_date, x_project_end_date) to preserve the project context. Odoo Project app handles true project management separately.
D-Tools
Location
Odoo CRM
res.partner (address field) / crm.lead custom field
1:1D-Tools locations model work-site addresses that differ from client billing addresses. We map D-Tools location names and addresses to the street fields on the res.partner record. When multiple locations exist per project, we concatenate them into a custom Char field (x_project_locations) on the crm.lead to preserve the full site context without splitting into separate partner records.
D-Tools
Integrated Product Library (i3)
Odoo CRM
crm.lead custom fields
1:1D-Tools i3 product library stores manufacturer SKUs, dealer pricing, specifications, and product images per project line item. Odoo CRM has no native product library. We preserve D-Tools product data as custom Char/Number fields on crm.lead (x_product_sku, x_dealer_price, x_product_description) so opportunity line context survives the migration even without native library linkage.
D-Tools
Service Plan
Odoo CRM
crm.lead custom fields
1:1D-Tools service plans track recurring billing with plan name, feature list, dynamic/fixed pricing, and billing frequency. Odoo CRM has no service-plan object. We map plan name to x_service_plan_name (Char), monthly cost to x_service_plan_cost (Float), and billing frequency to x_billing_frequency (Selection). Recurring revenue tracking requires Odoo Subscriptions app post-migration.
D-Tools
Workflow Rule
Odoo CRM
Odoo Studio automation (no direct map)
1:1D-Tools workflow rules fire notifications and field updates based on project status changes and user assignments. Odoo Studio automations handle the equivalent logic but require manual rebuild using Odoo's automation designer. FlitStack AI exports the full D-Tools workflow rule definitions as a JSON reference document so your Odoo admin can recreate each rule accurately.
D-Tools
Task / Checklist
Odoo CRM
crm.lead activity / ir.attachment
1:1D-Tools project tasks and checklists are project-management constructs. Odoo CRM supports activities (mail.activity) on leads but not full task management. We export D-Tools task names, statuses, and assignments as a structured custom note field (x_task_list) on the crm.lead. True task management requires Odoo Project app post-migration.
D-Tools
Change Order
Odoo CRM
crm.lead custom fields
1:1D-Tools change orders track approved scope and price changes on a project. Odoo CRM has no native change-order construct. We preserve change order data as a custom JSON/Char field (x_change_orders) on the opportunity so historical pricing adjustments are not lost during the migration.
D-Tools
Attachment / File
Odoo CRM
ir.attachment
1:1D-Tools file attachments on projects (drawings, photos, spec sheets) export from the D-Tools filestore. We re-upload each file as an ir.attachment linked to the corresponding crm.lead in Odoo. D-Tools file size limits apply at export time; Odoo's attachment storage limits are set by your hosting configuration (Odoo.sh or self-hosted).
D-Tools
D-Tools User / Owner
Odoo CRM
res.users (matched by email)
1:1D-Tools owner assignment on projects maps to the salesrep on the Odoo crm.lead. We resolve owners by matching D-Tools owner email addresses against Odoo res.users records. Unmatched owners are flagged in the migration report — your Odoo admin creates the user accounts before the full run so no opportunity lands without an assigned salesrep.
D-Tools
D-Tools API ID
Odoo CRM
Custom Char field (x_dtools_id)
1:1The original D-Tools API record identifier is stored as x_dtools_id on every target Odoo record. This field serves three purposes: enables delta-run de-duplication (records modified in D-Tools after the initial export are matched by x_dtools_id), provides traceability for audit purposes, and allows your team to cross-reference source records during the post-migration reconciliation window.
| D-Tools | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Contact | res.partner (contact)1:1 | Fully supported | |
| Project | crm.lead (opportunity)1:1 | Fully supported | |
| Location | res.partner (address field) / crm.lead custom field1:1 | Fully supported | |
| Integrated Product Library (i3) | crm.lead custom fields1:1 | Not supported | |
| Service Plan | crm.lead custom fields1:1 | Fully supported | |
| Workflow Rule | Odoo Studio automation (no direct map)1:1 | Fully supported | |
| Task / Checklist | crm.lead activity / ir.attachment1:1 | Fully supported | |
| Change Order | crm.lead custom fields1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| D-Tools User / Owner | res.users (matched by email)1:1 | Fully supported | |
| D-Tools API ID | Custom Char field (x_dtools_id)1: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
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Audit D-Tools data inventory and design Odoo custom field schema
FlitStack AI inventories all D-Tools records accessible via the Cloud API: clients, contacts, projects, locations, product library entries, service plans, and attachments. We capture field names, pick-list values, API record IDs, and owner assignments. Using this inventory, we design the Odoo custom field schema — creating Char, Float, Date, Datetime, and Selection fields on crm.lead and res.partner using Odoo's x_ field-name convention. The schema design document is delivered for your Odoo admin to apply before the migration run.
Export D-Tools data in batches respecting API rate limits
We extract D-Tools data via the Cloud API, implementing paginated requests with 120 calls/minute compliance and exponential backoff on 429 responses. Large D-Tools instances with 10,000+ API calls required for clients, contacts, projects, and product library rows are spread across multiple export windows to avoid the daily cap. All records are written to an intermediate staging format with original D-Tools API IDs, create timestamps, and owner email preserved. Attachments and files are downloaded from the D-Tools filestore in parallel.
Transform D-Tools data model to Odoo crm.lead and res.partner schema
Each D-Tools record is transformed to its Odoo target model. Clients and contacts land as res.partner records (company and individual modes). Projects become crm.lead records with custom fields populated for project value, status, start/end dates, locations, task list, change orders, and product library entries. D-Tools owner email addresses are resolved to Odoo res.users records by email match — unmatched owners are flagged in a resolution report for your admin to address before the full run.
Run sample migration with field-level diff before full commitment
A representative sample of 100–300 records migrates into the Odoo staging instance first — spanning clients, contacts, opportunities with custom fields, and a sample attachment. FlitStack AI generates a field-level diff comparing source D-Tools values against the destination Odoo fields so you can verify custom field mapping, pick-list value translation, date format handling, and owner resolution before the full run commits. Any mapping errors are corrected in the transformation scripts before proceeding.
Execute full migration with delta-pickup window and post-migration reconciliation
The full migration loads all D-Tools records into Odoo CRM via the xmlrpc/jsonrpc API, respecting rate limits on the destination instance. A delta-pickup window (24–48 hours) captures any records created or modified in D-Tools during the cutover window so Odoo reflects the final source state at go-live. Attachments are re-uploaded as ir.attachment records linked to the corresponding opportunities. FlitStack AI delivers a reconciliation report showing record counts by object, unmapped fields, and owner resolution status, with one-click rollback available if critical errors surface.
Platform deep dives
D-Tools
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between D-Tools and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across D-Tools and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between D-Tools and Odoo CRM.
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 Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your D-Tools to Odoo 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 Odoo 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.