CRM migration
Field-level mapping, validation, and rollback between AgileCase and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
AgileCase
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between AgileCase and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
AgileCase is fundamentally a case-management platform — its core object is the Case, which bundles custom fields, attachments, workflow stages, and client communications under one record. Odoo CRM inverts this model: contacts and companies live in res.partner, while work items live in crm.lead (Leads and Opportunities) with stage pick-lists and activity logging. The migration must therefore perform a structural translation: every AgileCase Case becomes an Odoo crm.lead record, with AgileCase custom fields recreated as custom fields on the crm.lead model using Odoo's ir.model.fields framework. Owner resolution maps AgileCase user emails to Odoo res.users by email match. Attachments are downloaded and re-uploaded to Odoo ir.attachment records linked to the target crm.lead. Workflows, automations, email templates, and audit trails cannot migrate — AgileCase workflow definitions export as JSON for manual Odoo Studio or server-action rebuild, and audit history is preserved as a custom text field (Audit_History__c) for reference. FlitStack runs a test migration against a representative sample before the full cutover, then captures a 24–48h delta window for in-flight records.
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 AgileCase 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.
AgileCase
Case
Odoo CRM
crm.lead
1:1Every AgileCase Case maps to an Odoo crm.lead record. The Case title becomes the crm.lead name field. The Case description maps to crm.lead description. Original create dates are preserved in a custom field (Original_Create_Date__c) because Odoo's create_date reflects migration time.
AgileCase
Case Stage / Workflow Stage
Odoo CRM
crm.stage
1:1AgileCase workflow stages map value-by-value to Odoo crm.stage records. Each AgileCase stage name creates or matches a corresponding Odoo stage in the target pipeline. Stage ordering and probability values are mapped from Odoo stage configuration. If AgileCase uses custom stage labels, they map 1:1 with explicit value mapping.
AgileCase
Client / Contact (within Case)
Odoo CRM
res.partner
1:1AgileCase stores client contact details inside the Case record. FlitStack extracts unique contact data to res.partner first (name, email, phone, address), then links the new partner to the crm.lead via the partner_id field. If the same client appears across multiple Cases, Odoo deduplicates by email match to avoid duplicate res.partner records.
AgileCase
Case Owner / Assigned User
Odoo CRM
res.users (user_id on crm.lead)
1:1AgileCase user email addresses are matched against Odoo res.users by email. Unmatched owners are flagged before migration — your team either creates the Odoo user first or assigns a fallback owner. This ensures every crm.lead lands with a valid user_id and appears in the correct Odoo sales team.
AgileCase
Case Custom Fields
Odoo CRM
ir.model.fields (x_ac_ prefix for Community)
1:1Every AgileCase custom field definition (text, number, date, pick-list, checkbox) is recreated as an Odoo custom field on the crm.lead model before migration. Pick-list fields in AgileCase create Odoo selection fields with the same options. Boolean fields map to Odoo boolean fields. Text fields with length limits map to Odoo char or text fields depending on content length.
AgileCase
Case Attachment / File
Odoo CRM
ir.attachment
1:1AgileCase file attachments are downloaded, then uploaded to Odoo ir.attachment records linked to the parent crm.lead via res_model='crm.lead' and res_id set to the migrated lead ID. File names, MIME types, and binary content are preserved. Inline images in Case notes are extracted and rehosted as attachments.
AgileCase
Case Notes / Activity Log
Odoo CRM
mail.message
1:1AgileCase activity log entries (internal notes, status changes) are migrated as Odoo mail.message records on the crm.lead, with message_type='comment'. Original timestamps and author email are preserved. This gives Odoo a full historical timeline on the lead without requiring the OdooDiscuss or inbox modules.
AgileCase
Case Email / SMS Communication
Odoo CRM
mail.message (email) / mail.message (SMS via subtype)
1:1AgileCase emails and SMS records linked to a Case migrate as mail.message records on the crm.lead. Email threads are reconstructed using subject-line grouping where AgileCase preserves thread context. Odoo's mail.message model supports email headers natively for thread reconstruction, including attachments.
AgileCase
Case Workflow / Automation
Odoo CRM
No equivalent — manual rebuild required
1:1AgileCase automations (task creation, email triggers, stage-change scripts) do not transfer. FlitStack exports your AgileCase workflow definitions as a JSON document — each rule's trigger, condition, and action is documented — which your Odoo admin uses as a rebuild reference for Odoo automated actions (Enterprise) or server actions (Community).
AgileCase
Client Portal Data
Odoo CRM
No equivalent — Odoo Website portal required
1:1AgileCase client portal entries (shared documents, case status views) have no Odoo CRM equivalent. Odoo Website portal module must be installed for contact-facing case/opportunity visibility. Portal access rules, document sharing, and customer-facing status pages need to be rebuilt in Odoo Website after migration.
AgileCase
Audit Trail (field-change history)
Odoo CRM
Custom text field (Audit_History__c) on crm.lead
1:1AgileCase audit trail entries (field name, old value, new value, changed by, timestamp) are serialized into a long-text custom field on each crm.lead. Odoo Community does not have a native audit log UI, so this custom field provides reference-level history for compliance review without requiring Odoo Enterprise.
AgileCase
Tag / Category Label
Odoo CRM
crm.tag
1:1AgileCase case categories or tags map to Odoo crm.tag records. A many2many relation (crm_lead_tag_rel) links each crm.lead to its tags. Tag names are preserved exactly. If AgileCase uses hierarchical tags, Odoo's tag model is flat — nested tag structures collapse to the leaf label.
| AgileCase | Odoo CRM | Compatibility | |
|---|---|---|---|
| Case | crm.lead1:1 | Fully supported | |
| Case Stage / Workflow Stage | crm.stage1:1 | Fully supported | |
| Client / Contact (within Case) | res.partner1:1 | Fully supported | |
| Case Owner / Assigned User | res.users (user_id on crm.lead)1:1 | Fully supported | |
| Case Custom Fields | ir.model.fields (x_ac_ prefix for Community)1:1 | Fully supported | |
| Case Attachment / File | ir.attachment1:1 | Fully supported | |
| Case Notes / Activity Log | mail.message1:1 | Fully supported | |
| Case Email / SMS Communication | mail.message (email) / mail.message (SMS via subtype)1:1 | Fully supported | |
| Case Workflow / Automation | No equivalent — manual rebuild required1:1 | Fully supported | |
| Client Portal Data | No equivalent — Odoo Website portal required1:1 | Fully supported | |
| Audit Trail (field-change history) | Custom text field (Audit_History__c) on crm.lead1:1 | Fully supported | |
| Tag / Category Label | crm.tag1: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.
AgileCase gotchas
Audit trail retention is tier-dependent
Post-termination 30-day export window in DPA
Blob storage document extraction requires flattening
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
Inventory AgileCase data: Cases, contacts, custom fields, attachments, and workflows
FlitStack connects to AgileCase via API (REST or CSV export) and produces a full data inventory: Case count, unique custom field definitions, attachment volume, user list, workflow rule count, and tag taxonomy. We also capture the AgileCase workflow rule definitions as JSON for manual rebuild reference. This step identifies the scope baseline — record volume and custom field count are the primary pricing inputs, and the inventory report becomes the acceptance criteria for the sample migration.
Create Odoo custom fields on crm.lead before data arrives
Before any data moves, FlitStack creates the Odoo custom fields that mirror every AgileCase custom field definition. For Odoo Community, this uses a csv import to ir.model.fields with the x_ac_ prefix. For Odoo Enterprise with Studio enabled, fields can be created in the UI. Pick-list custom fields get the same option labels as AgileCase. Boolean, date, and number fields are typed to match. This step runs in your Odoo staging or sandbox environment first, then repeats on production.
Extract, deduplicate, and map contacts to res.partner
FlitStack extracts all unique contact data embedded in AgileCase Cases, deduplicates by email match, and inserts into Odoo res.partner. Email addresses are the primary deduplication key. Each res.partner record is created with name, email, phone, address fields before crm.lead records are inserted. Owner resolution runs in parallel: AgileCase user emails are matched to Odoo res.users records, and any unmatched owners are flagged for your team to create Odoo users or assign a fallback.
Run sample migration with field-level diff
A representative slice (typically 100–500 Cases spanning all custom field types, attachment types, and workflow stages) migrates to Odoo first. FlitStack generates a field-level diff comparing source AgileCase values against destination Odoo values for every mapped field. You verify that pick-list values rendered correctly, owner assignments resolved, custom field data landed in the right columns, and attachments are accessible on the crm.lead form. Approval of the sample diff unlocks the full migration run.
Full migration run with 24–48h delta pickup window
The full migration commits all Cases, activities, attachments, and audit trail entries to Odoo. A delta pickup window (24–48 hours from migration start) captures any Cases created or modified in AgileCase during the cutover period. After delta pickup closes, FlitStack generates a reconciliation report comparing source counts against destination record counts. One-click rollback reverts the Odoo environment to pre-migration state if reconciliation fails. The audit log is delivered as a JSON file alongside the migration report.
Deliver workflow export JSON and post-migration handoff documentation
FlitStack delivers the AgileCase workflow definitions as a structured JSON document listing each automation's trigger, condition, action, and stage context. Your Odoo admin uses this as a rebuild checklist for Odoo automated actions (Enterprise) or server actions (Community). The handoff package also includes: custom field mapping spreadsheet, owner resolution report, attachment inventory, and a 30-day post-migration support window for any data integrity corrections.
Platform deep dives
AgileCase
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 AgileCase 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
AgileCase: Not publicly documented.
Data volume sensitivity
AgileCase 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 AgileCase to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your AgileCase 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 AgileCase
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.