CRM migration
Field-level mapping, validation, and rollback between Smokeball and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Smokeball
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Smokeball and Odoo CRM.
Complexity
BStandard
Timeline
3–5 days
Overview
Smokeball is practice management software built specifically for law firms — it models Contacts, Matters, Activities, Documents, and Workflows using legal-industry semantics and billing integrations. Odoo CRM operates with a general-business model: res.partner handles contacts and companies, crm.lead manages leads and opportunities, crm.activity tracks planned tasks and meetings, and ir.attachment stores file binaries. Our migration strategy maps Smokeball Contacts to res.partner records, Smokeball Matters to crm.lead records in the opportunity stage, Smokeball Activities to crm.activity entries, and Smokeball Documents to ir.attachment records linked to the corresponding Odoo records. Hard costs, soft costs, and trust accounting balances require Odoo accounting module configuration after migration completes. Smokeball workflows — automated task sequences tied to matter types and status triggers — do not migrate automatically; they must be manually rebuilt using Odoo's base.automation engine or Studio tools. We access Smokeball data via their REST API for live extraction and write to Odoo using XML-RPC API calls. A sample migration runs first so you can verify field-level accuracy before the full cutover commits.
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 Smokeball 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.
Smokeball
Contact
Odoo CRM
res.partner
1:1Smokeball contacts map directly to Odoo res.partner records. Names, emails, phone numbers, addresses, and tags transfer as-is. The res.partner record type (contact vs. company) defaults to 'contact' unless the Smokeball contact has a company association, in which case it becomes a company record with contact children.
Smokeball
Contact (with company link)
Odoo CRM
res.partner (company record)
1:1Smokeball contacts that have a primary company association become Odoo res.partner records with partner_type='company'. The company name from Smokeball becomes the res.partner name field, while individual contact names populate the display_name field. Child contacts for that company create separate res.partner records linked via child_ids, preserving the hierarchical relationship structure.
Smokeball
Matter
Odoo CRM
crm.lead (opportunity stage)
1:1Smokeball matters map to Odoo crm.lead records in the 'opportunity' state (type='opportunity'). The matter description becomes the crm.lead name field. Matter status (Open/Pending/Closed) maps to Odoo crm.stage_id based on the stage configuration in Odoo's CRM Pipeline settings, requiring prior stage setup by your Odoo administrator.
Smokeball
Matter Type
Odoo CRM
crm.lead.stage_id + custom field
1:1Smokeball matter types (e.g., Family Law, Personal Injury, Corporate) have no direct Odoo equivalent. We create a custom Char or Selection field on crm.lead called x_smokeball_matter_type and populate it from the source. Odoo stage configuration can group stages by matter type using Kanban columns filtered by this custom field.
Smokeball
Activity (task/meeting/call)
Odoo CRM
crm.activity
1:1Smokeball activities — tasks, meetings, calls, and billable time entries — map to Odoo crm.activity records. Activity type (call, meeting, task, email) maps to Odoo's activity_type_id. Original dates, durations, and staff assignments transfer. Unbilled time entries become crm.activity records linked to the opportunity.
Smokeball
Document / Attachment
Odoo CRM
ir.attachment
1:1Smokeball documents attached to matters re-upload to Odoo as ir.attachment records linked to the crm.lead. File names, content types, and binary content preserve exactly as they existed in Smokeball. Large document batches exceeding 500 per matter may require batch processing with smaller chunk sizes to avoid Odoo worker timeout issues during the migration run.
Smokeball
Staff / User
Odoo CRM
res.users
1:1Smokeball staff records (first name, surname, email, status) map to Odoo res.users. Email matching resolves the owner on migrated matters and activities. Inactive Smokeball staff become Odoo users with active=False. If Smokeball staff lack email addresses, they are flagged for manual Odoo user creation.
Smokeball
Hard Cost / Soft Cost
Odoo CRM
account.move.line (on vendor bills)
1:1Smokeball hard costs and soft costs are legal billing constructs with no Odoo equivalent. We map hard costs to account.move.line entries on vendor bills with a custom x_cost_type='hard' field. Soft costs map similarly with x_cost_type='soft'. Trust accounting balances require separate Odoo configuration post-migration.
Smokeball
Workflow
Odoo CRM
base.automation (manual rebuild)
1:1Smokeball workflows (automated task sequences tied to matter type triggers) do not migrate. We export workflow definitions as JSON so your Odoo administrator can rebuild them using base.automation triggers (on_create, on_write, on_cron) and server actions. The exported JSON includes task names, trigger conditions, and sequence order.
Smokeball
Tag
Odoo CRM
res.partner.category
1:1Smokeball contact tags map to Odoo res.partner.category (contact tags). Matter tags map to crm.tag. Tags with identical names merge; tags with no Odoo match create new category records during migration. Tag color assignments do not transfer and default to Odoo's neutral color.
Smokeball
Custom Field (Contact/Matter)
Odoo CRM
ir.model.fields (x_ fields)
1:1Smokeball custom fields on contacts and matters require Odoo custom field creation via Settings > Technical > Database Structure > Fields. Field types map: text to Char, number to Float or Integer, date to Date, dropdown to Selection. Post-migration, Odoo Studio provides a GUI for managing these fields.
Smokeball
Trust Account Balance
Odoo CRM
account.journal (trust) + account.move
1:1Smokeball trust account balances (client funds held in trust) map to an Odoo account.journal with type='bank' and x_is_trust=True custom flag. Opening balances transfer as account.move entries. This setup requires the Odoo accounting module configuration with proper chart of accounts and trust-specific account codes established before migration runs.
| Smokeball | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Contact (with company link) | res.partner (company record)1:1 | Fully supported | |
| Matter | crm.lead (opportunity stage)1:1 | Fully supported | |
| Matter Type | crm.lead.stage_id + custom field1:1 | Fully supported | |
| Activity (task/meeting/call) | crm.activity1:1 | Fully supported | |
| Document / Attachment | ir.attachment1:1 | Fully supported | |
| Staff / User | res.users1:1 | Fully supported | |
| Hard Cost / Soft Cost | account.move.line (on vendor bills)1:1 | Fully supported | |
| Workflow | base.automation (manual rebuild)1:1 | Fully supported | |
| Tag | res.partner.category1:1 | Fully supported | |
| Custom Field (Contact/Matter) | ir.model.fields (x_ fields)1:1 | Fully supported | |
| Trust Account Balance | account.journal (trust) + account.move1: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.
Smokeball gotchas
Document upload may not finish before Go Live
Data entry must halt during final LIVE migration cutover
Duplicate contacts are not detected during import
Closed and archived matters migrate after Go Live
Lower pricing tiers strip PDF functionality and auto time
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 Smokeball data and configure Odoo accounting module
FlitStack AI runs a pre-migration audit against your Smokeball instance via REST API — extracting contacts, matters, activities, documents, staff, tags, and custom field schemas. We generate a data quality report flagging duplicates, missing emails, inactive records, and workflow count. Simultaneously, your Odoo administrator configures the accounting module (chart of accounts, trust journal, tax codes) so billing data has a destination on migration day.
Create Odoo custom fields and configure CRM Pipeline stages
Based on the audit findings, we create Odoo custom fields (x_smokeball_matter_type, x_internal_reference, x_original_create_date, x_cost_type, and others) via the ir.model.fields API. This includes Selection fields for dropdown values, Char fields for text, Date fields for timestamps, and Float/Integer fields for numeric custom properties. Your Odoo administrator then configures CRM Pipeline stages to match your Smokeball matter statuses, grouping Kanban columns by matter type where applicable. This step ensures field mapping validation runs against the correct Odoo schema before migration data arrives.
Run sample migration with field-level diff for verification
A representative sample (typically 200–500 records including 50 contacts, 30 matters, 100 activities, and 20 documents) migrates to your Odoo instance first. We generate a comprehensive field-level diff comparing source values against destination field contents, surfacing any mapping discrepancies, truncated data, or missing field translations before the full run proceeds. You review the diff output and approve the mapping accuracy before cutover commits to the complete dataset.
Execute full migration with delta-pickup window
The full migration executes in dependency order: res.partner records first (since crm.lead requires partner_id links), then crm.lead records for matters, then crm.activity records linked to leads, and finally ir.attachment records for documents. A 24–48 hour delta-pickup window captures any records created or modified in Smokeball during the cutover period. An audit log records every write operation with timestamps and user context; if reconciliation fails, a one-click rollback reverts the Odoo instance to its pre-migration state.
Deliver workflow export package and post-migration handoff
We export Smokeball workflow definitions as structured JSON containing task names, trigger conditions, assignee rules, and sequence order for each workflow. Alongside the export, we deliver a detailed rebuild guide that maps each Smokeball trigger condition to corresponding Odoo base.automation triggers (on_create, on_write, on_cron, on_change) and available server actions. Post-migration, your Odoo administrator configures the accounting module trust journal if applicable, assigns CRM team membership to migrated users, and validates document attachments on sample matters. FlitStack provides 30 days of post-migration support for data corrections and mapping adjustments.
Platform deep dives
Smokeball
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Smokeball and Odoo CRM.
Object compatibility
2 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
Smokeball: Not publicly documented.
Data volume sensitivity
Smokeball 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 Smokeball to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Smokeball 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 Smokeball
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.