CRM migration
Field-level mapping, validation, and rollback between FactBox and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
FactBox
Source
Odoo CRM
Destination
Compatibility
10 of 11
objects map 1:1 between FactBox and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
FactBox organizes legal work around cases, facts, witnesses, evidence, and documents — a schema purpose-built for litigation and case management. Odoo CRM structures data around leads, opportunities, contacts, and activities — a commercial-sales framework. These models diverge significantly: a FactBox 'case' maps to an Odoo crm.lead; a 'fact' becomes a scheduled activity or note; a witness becomes a res.partner with a custom witness-type flag; and evidence maps to custom fields or linked attachments. We extract FactBox data via API or structured export, map each entity to its Odoo counterpart, create Odoo custom fields (x_case_id, x_case_type__c, x_judge__c) on the crm.lead model for legal metadata that has no standard CRM equivalent, then sequence the import so relationship IDs resolve correctly. Document and exhibit files are downloaded and re-uploaded into Odoo's ir.attachment table with the correct res_model and res_id linking back to each crm.lead. Workflows, automation rules, and legal-process templates do not transfer — we export FactBox's case structure and activity logs as a rebuild reference for Odoo Studio or a developer. The migration runs in a scoped read session against FactBox; your team continues working during the cutover, and a delta window captures in-flight changes.
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 FactBox 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.
FactBox
Case
Odoo CRM
crm.lead
1:1Each FactBox case maps to a single Odoo crm.lead record. The case name becomes the lead name, case status maps to lead stage via value mapping, and legal metadata (court, judge, opposing counsel, case type) migrate as Odoo Enterprise custom fields on the lead. Parent-child case hierarchy maps to the crm.lead parent_id self-referential field.
FactBox
Fact
Odoo CRM
mail.activity / mail.message
1:1Each FactBox fact becomes either a scheduled Odoo mail.activity (with a due date) or a mail.message note on the parent crm.lead. The fact content maps to the activity's note field. Original create and update timestamps are preserved as custom datetime fields on the activity record for factual chronology continuity.
FactBox
Document / Exhibit
Odoo CRM
ir.attachment
1:1FactBox documents and exhibits download from FactBox's storage and re-upload into Odoo's ir.attachment table. Each attachment sets res_model='crm.lead' and res_id pointing to the mapped case's lead ID. Exhibit numbers and document-type metadata map to ir.attachment custom fields (x_exhibit_number, x_document_type) on the attachment record.
FactBox
Witness
Odoo CRM
res.partner
1:1Each FactBox witness record creates a res.partner in Odoo with type='contact' and a custom field x_contact_role='Witness'. The witness name maps to partner name, contact details map to standard address and phone fields. Testimony text maps to a custom long-text field on the partner for reference — linked to the parent case via a many2one on the crm.lead.
FactBox
Evidence
Odoo CRM
crm.lead (custom field) / ir.attachment
many:1Evidence items with text content merge into a custom Evidence_Summary__c long-text field on the parent crm.lead. Evidence items with file attachments map to ir.attachment records linked to the parent crm.lead. Exhibit tag and evidence type values map via value_mapping to a custom pick-list on the lead.
FactBox
Issue / Legal Claim
Odoo CRM
crm.lead.tag / mail.message
1:1FactBox issues and legal claims map to Odoo CRM tags (crm.tag) created dynamically from source issue names, linked to the crm.lead via crm.lead.resolver.tag_ids. Longer issue narratives migrate as mail.message notes on the lead for auditability. We also map each issue's status to the tag's active flag, preserving its open or closed state in Odoo.
FactBox
Timeline Event
Odoo CRM
mail.message
1:1FactBox timeline entries — hearing dates, filing dates, deposition dates — map directly to Odoo's mail.message records on the crm.lead. Each message preserves the original event date as message_date and adds a custom field x_event_type to distinguish hearing, filing, and deposition events.
FactBox
Owner / Assignee
Odoo CRM
res.users
1:1FactBox owner resolved by email match against Odoo's res.users table. Unmatched owners flagged before migration; records assigned to a fallback Odoo user or held for admin assignment. FactBox does not have a separate user-object table — owner ID maps via the user's email in the export.
FactBox
Custom Property (Case-level)
Odoo CRM
crm.lead custom fields
1:1FactBox custom properties at the case level (e.g., x_case_number, x_case_type, x_judge, x_opposing_counsel, x_court) require Odoo Enterprise custom fields on crm.lead. Odoo Community does not support Studio-based field creation — Enterprise plan or direct PostgreSQL field addition is required for these mappings.
FactBox
Custom Property (Witness / Fact-level)
Odoo CRM
res.partner / mail.activity custom fields
1:1Witness-specific and fact-specific custom properties migrate as custom fields on the respective target objects. These require Odoo Enterprise custom field support on res.partner and mail.activity models. We surface all required custom fields in the pre-migration schema plan before data moves.
FactBox
Attachments / Files
Odoo CRM
ir.attachment
1:1All FactBox file attachments — correspondence, court filings, discovery documents — download and re-upload to Odoo's ir.attachment table. Each record stores the original filename, file size, and MIME type. The migration tool sets res_model='crm.lead' and res_id to the mapped case lead ID, preserving the link to the originating case.
| FactBox | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case | crm.lead1:1 | Fully supported | |
| Fact | mail.activity / mail.message1:1 | Fully supported | |
| Document / Exhibit | ir.attachment1:1 | Fully supported | |
| Witness | res.partner1:1 | Fully supported | |
| Evidence | crm.lead (custom field) / ir.attachmentmany:1 | Mapping required | |
| Issue / Legal Claim | crm.lead.tag / mail.message1:1 | Fully supported | |
| Timeline Event | mail.message1:1 | Fully supported | |
| Owner / Assignee | res.users1:1 | Fully supported | |
| Custom Property (Case-level) | crm.lead custom fields1:1 | Fully supported | |
| Custom Property (Witness / Fact-level) | res.partner / mail.activity custom fields1:1 | Fully supported | |
| Attachments / Files | ir.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.
FactBox gotchas
Annual subscription does not auto-renew
Limited public API documentation
File attachment handling requires separate migration
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 FactBox data model and Odoo target schema
We read your FactBox export or connect via API to enumerate every case, fact, document, witness, evidence, and custom property. We simultaneously inspect your Odoo database (or fresh Odoo instance) to identify installed modules, existing custom fields on crm.lead and res.partner, and which Odoo edition (Community or Enterprise) is active. This produces the data map — the authoritative record of what goes where before any data moves.
Create Odoo custom fields and resolve owner mapping
We create the required Odoo Enterprise custom fields on crm.lead (x_case_id, x_case_type__c, x_court__c, x_judge__c, x_opposing_counsel__c, x_evidence_summary__c, x_original_open_date__c) and on res.partner (x_contact_role__c). If Odoo Community is in use, we surface this and recommend upgrading before migration. We run the email-based owner resolution against res.users and flag any unmatched owners with the record IDs affected. All custom fields are added using Odoo Studio or direct PostgreSQL commands, depending on your edition, to ensure schema consistency before data import.
Migrate parent cases first, then facts, witnesses, and documents
We sequence the import so foreign keys resolve correctly: crm.lead parent_id self-references require parent leads to land first. Witness res.partner records create before document and evidence links. FactBox documents download to a staging directory, then bulk-upload to ir.attachment with the correct res_model and res_id. Each batch commits after validation so a failed batch does not corrupt the prior state and ensures referential integrity across all object types.
Run sample migration with field-level diff and validate linkages
A representative slice of cases (typically 50–200 records including cases with documents, witnesses, facts, and timeline events) migrates first. We generate a field-level diff comparing source FactBox values against the destination Odoo records. You verify custom field values on crm.lead, ir.attachment linking, and witness contact roles before the full run commits. Exhibit numbers and document-type metadata are spot-checked against the source.
Full migration with delta-pickup and one-click rollback
Full data migration runs against Odoo. A delta-pickup window (24–48 hours) captures any cases, facts, or documents created or modified in FactBox during the cutover. All operations are logged to an audit table. If reconciliation fails, one-click rollback reverts the Odoo database to its pre-migration state. Post-migration, we deliver a reconciliation report showing record counts by object, attachment count, and any records that landed with a fallback owner.
Platform deep dives
FactBox
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 FactBox and Odoo 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
FactBox: Not applicable — no public API endpoints are published..
Data volume sensitivity
FactBox 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 FactBox to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your FactBox 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 FactBox
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.