CRM migration
Field-level mapping, validation, and rollback between SmartDesk and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
SmartDesk
Source
Odoo CRM
Destination
Compatibility
14 of 17
objects map 1:1 between SmartDesk and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from SmartDesk to Odoo CRM is a structural migration from a unified all-in-one platform into a modular ERP ecosystem where the CRM module is one component among many. SmartDesk stores Contacts, Accounts, Deals, Pipelines, and Activities in a flat-per-account schema; Odoo CRM uses the crm_lead model for both Leads and Opportunities and res.partner for Contacts and Companies, with the distinction managed by a partner_id field and lead_type selection rather than separate objects. We resolve that object-model difference during scoping, map SmartDesk's custom pipeline stages to Odoo's stage configuration, and preserve the full activity timeline through Odoo's mail.message and mail.activity API endpoints. SmartDesk's built-in Help Desk Tickets and Knowledge Base migrate as crm.lead records with tag-based categorization; Odoo Workflows and Automations do not migrate as code. We deliver a written inventory of every active SmartDesk workflow, automation, and sequence for the customer's admin to rebuild in Odoo Studio or via server actions post-migration.
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 SmartDesk 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.
SmartDesk
Contact
Odoo CRM
res.partner
1:1SmartDesk Contacts map directly to Odoo res.partner records. We set partner_id to the matched Contact record and set customer=True to distinguish from Company-type partners. SmartDesk's contact lifecycle stage maps to a custom Char field smartdesk_lifecycle_stage__c on res.partner for audit. Email, phone, address, and custom contact properties migrate field-to-field. The res.partner record is created before any Deals to satisfy the partner_id required field on crm.lead.
SmartDesk
Account (Company)
Odoo CRM
res.partner (company type)
1:1SmartDesk Accounts (Companies) map to Odoo res.partner with is_company=True. The SmartDesk company domain becomes the partner's website field and is used as the dedupe key during import. Industry classification and employee count map to Odoo industry_id and employee_size fields (custom Many2one fields that the customer configures via IrProperty before migration). Custom properties attached to the Account migrate to custom fields on res.partner.
SmartDesk
Lead
Odoo CRM
crm.lead
1:1SmartDesk Leads map to Odoo crm.lead records with type='lead'. Lead Source and Lead Status from SmartDesk custom fields migrate to crm.lead's source_id (Many2one to crm.lead.lost_reason or a custom Char) and stage_id (Many2one to crm.stage) respectively. The customer's SmartDesk pipeline stage names are reconciled against the Odoo stage sequence, and any unmatched stages are flagged for stage creation in Odoo Studio before migration.
SmartDesk
Deal
Odoo CRM
crm.lead (opportunity)
1:1SmartDesk Deals map to Odoo crm.lead with type='opportunity'. The SmartDesk dealstage maps to Odoo stage_id, deal_value maps to planned_revenue, expected close date maps to date_deadline, and owner maps to user_id resolved via email match to res.users. Deals linked to SmartDesk Contacts resolve to res.partner partner_id; Deals linked to SmartDesk Accounts resolve to the company-type res.partner parent_id on the Contact.
SmartDesk
Pipeline + Stages
Odoo CRM
crm.stage
lossySmartDesk Pipelines and Stages require Odoo stage configuration before Deal migration. We enumerate every distinct SmartDesk pipeline and stage combination and create corresponding crm.stage records per Sales Team in Odoo. Stage probability percentages from SmartDesk migrate to the stage's sequence and probability fields. If SmartDesk stages have no probability data, we default to Odoo's standard stage probability curve and flag for customer review.
SmartDesk
Task
Odoo CRM
crm.lead (activity)
1:1SmartDesk Tasks attached to Contacts or Deals map to Odoo crm.lead records with type='lead' for standalone tasks, or to Task records linked via mail.activity with type='other'. We preserve task assignee (resolved to res.users by email), due date, status, and description body. Linked Contacts resolve to res.partner partner_id; linked Deals resolve to crm.lead id via SmartDesk deal ID lookup.
SmartDesk
Activity: Call
Odoo CRM
mail.activity (type=call)
1:1SmartDesk call activities map to Odoo mail.activity records with activity_type_id set to the Call type (created in Odoo as a custom activity type). Call duration and disposition migrate to custom fields on the activity record. The activity's related SmartDesk Contact or Deal resolves to the target res.partner or crm.lead in Odoo via the parent record lookup step.
SmartDesk
Activity: Email
Odoo CRM
mail.message
1:1SmartDesk email engagements map to Odoo mail.message records with message_type='email'. The email body, subject, and timestamp migrate directly. The related SmartDesk Contact resolves to res.partner for display in Odoo's mail thread. Email tracking data (opens, clicks) does not migrate as Odoo does not store this metadata in the same schema.
SmartDesk
Activity: Meeting
Odoo CRM
calendar.event
1:1SmartDesk meeting activities map to Odoo calendar.event records with start, stop, duration, and location preserved. Attendee mapping creates calendar.attendee records linked to the res.partner contacts and res.users for internal attendees. The related SmartDesk Contact or Deal resolves via the parent record lookup step.
SmartDesk
Activity: Note
Odoo CRM
mail.message (note)
1:1SmartDesk note activities map to Odoo mail.message records with subtype='mt_notes'. The note body and timestamp migrate directly. Internal notes are distinguishable from emails in Odoo's mail thread by message_type='notification' or a custom note flag.
SmartDesk
Campaign
Odoo CRM
crm.lead with tag
lossySmartDesk Campaigns are mapped to Odoo crm.lead records with a campaign tag applied via crm.tag. Campaign metadata (name, type, status, start/end dates) is stored in custom fields on the lead. The customer chooses whether to create individual crm.lead records per contact within a campaign or to tag existing leads; this is decided during scoping.
SmartDesk
Email Template
Odoo CRM
mail.template
1:1SmartDesk Email Templates migrate as mail.template records in Odoo with the template body, subject, and merge field placeholders preserved as static text. Dynamic conditional content and personalization logic embedded in SmartDesk templates is flagged for manual post-migration review in Odoo's template editor.
SmartDesk
Help Desk Ticket
Odoo CRM
crm.lead (tagged)
1:1SmartDesk Tickets do not map to a native Odoo Helpdesk object unless the customer purchases the Odoo Helpdesk module (~$129/user one-time). Without the module, we migrate Tickets as crm.lead records tagged with a 'ticket' tag, carrying priority, status, and conversation body as custom fields. If the Helpdesk module is active, Tickets map directly to helpdesk.ticket with conversation threads as mail.message records.
SmartDesk
Knowledge Base Article
Odoo CRM
knowledge.article
1:1SmartDesk KB Articles migrate to Odoo knowledge.article records with title, body (HTML), category, and isublished status preserved. Attachment URLs are re-linked post-migration. The knowledge.article schema in Odoo requires the Knowledge app to be installed; if it is not, we migrate KB content as crm.lead records or documentation attachments and flag the Knowledge module as a separate activation item.
SmartDesk
Attachment
Odoo CRM
ir.attachment
1:1File attachments associated with SmartDesk Contacts, Deals, or Tickets are downloaded from the source and uploaded to Odoo ir.attachment records linked via res_model and res_id to the corresponding res.partner or crm.lead. We preserve original filenames and file type metadata. Large attachment volumes require batched upload to avoid Odoo's attachment storage limit on certain hosting configurations.
SmartDesk
Custom Field
Odoo CRM
IrProperty (field definition)
lossySmartDesk custom fields require pre-creation in Odoo via IrProperty before migration. We provide a custom field manifest listing every SmartDesk custom field name, data type, and target object so the customer can configure the corresponding Odoo field definitions via Settings > Technical > Custom Fields or via module development before the migration run begins.
SmartDesk
User / Owner
Odoo CRM
res.users
1:1SmartDesk Owners map to Odoo res.users by email match. We resolve each SmartDesk owner email to the corresponding Odoo user and apply as user_id on crm.lead records and user_id on mail.activity records. Any SmartDesk owner without a matching Odoo user goes to a reconciliation queue; the customer's admin provisions missing users before record import resumes.
| SmartDesk | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Account (Company) | res.partner (company type)1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Deal | crm.lead (opportunity)1:1 | Fully supported | |
| Pipeline + Stages | crm.stagelossy | Fully supported | |
| Task | crm.lead (activity)1:1 | Fully supported | |
| Activity: Call | mail.activity (type=call)1:1 | Fully supported | |
| Activity: Email | mail.message1:1 | Fully supported | |
| Activity: Meeting | calendar.event1:1 | Fully supported | |
| Activity: Note | mail.message (note)1:1 | Fully supported | |
| Campaign | crm.lead with taglossy | Fully supported | |
| Email Template | mail.template1:1 | Fully supported | |
| Help Desk Ticket | crm.lead (tagged)1:1 | Fully supported | |
| Knowledge Base Article | knowledge.article1:1 | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Custom Field | IrProperty (field definition)lossy | Fully supported | |
| User / Owner | res.users1: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.
SmartDesk gotchas
No publicly documented public API endpoint reference
Pipeline stage count and naming differ between accounts
Custom Fields must be pre-created in the destination
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
Discovery and export format confirmation
We audit the source SmartDesk account to enumerate all objects in scope: Leads, Contacts, Accounts, Deals, Pipelines, Stages, Activities, Campaigns, Email Templates, Tickets, KB Articles, and custom fields. Because SmartDesk lacks a public API reference, we require the customer to provide a full platform export (admin panel CSV or JSON dump) or confirm API credentials for live schema discovery. We pair this with a review of the target Odoo instance: CRM module activation status, existing stage configuration, installed apps (Helpdesk, Knowledge, Project), and current res.users roster. The discovery output is a written migration scope and a pre-migration data cleansing checklist.
Field mapping design and custom field pre-creation manifest
We design the field mapping from every SmartDesk object to its Odoo counterpart: Contacts to res.partner (customer=True), Accounts to res.partner (is_company=True), Deals to crm.lead (type=opportunity), Leads to crm.lead (type=lead), Activities to mail.message and mail.activity, Tickets to helpdesk.ticket or tagged crm.lead, and KB Articles to knowledge.article or crm.lead documentation. We produce a custom field manifest listing every SmartDesk custom field, its Odoo data type, and the target Odoo model so the customer's admin can pre-create each field via IrProperty or module development before the migration run begins.
Odoo stage and pipeline configuration
We create the Odoo stage and pipeline configuration before any Deal or Opportunity records are imported. Each distinct SmartDesk pipeline becomes an Odoo Sales Team (crm.team) with its own stage set (crm.stage). Stage names, sequence order, and probability percentages migrate from SmartDesk to Odoo. If SmartDesk stages lack probability values, we apply Odoo's standard stage probability curve and flag the records for customer review. This configuration is deployed in the target Odoo instance's Settings > Technical > CRM > Stages before the migration run begins.
Test migration and reconciliation
We run a full test migration using the customer's SmartDesk export into a staging or sandbox copy of the target Odoo instance. We reconcile record counts across all objects: Contacts imported, Accounts imported, Deals imported, Activities imported. We spot-check 25-50 random records against the source SmartDesk export for field-level accuracy and flag any mapping discrepancies. Owner and user assignment is validated by email match. The customer reviews and signs off on the test migration results before the production migration window opens.
Production migration in dependency order
We run the production migration in strict dependency order: res.partner records (Accounts, then Contacts) first to satisfy foreign key requirements; crm.lead records (Leads and Opportunities) second with stage_id, partner_id, and user_id resolved; mail.message and mail.activity records third; helpdesk.ticket or tagged crm.lead records fourth; knowledge.article records fifth; ir.attachment records sixth; and custom field data seventh after Odoo's custom field definitions are confirmed active. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow rebuild handoff
We freeze SmartDesk writes during the cutover window, run a final delta migration of any records modified during the migration run, then enable Odoo as the system of record. We deliver a written workflow inventory documenting every active SmartDesk automation, workflow trigger, and sequence for the customer's admin to rebuild in Odoo Studio or as server actions. We do not migrate SmartDesk automations as Odoo code. We support a one-week hypercare window for reconciliation issues raised by the customer's team. Post-migration admin training and Odoo Workflow rebuild are outside standard scope and are quoted as separate engagements.
Platform deep dives
SmartDesk
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 SmartDesk and Odoo CRM.
Object compatibility
3 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
SmartDesk: Not publicly documented.
Data volume sensitivity
SmartDesk exposes a bulk API — large-volume migrations stream efficiently.
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 SmartDesk to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your SmartDesk 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 SmartDesk
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.