CRM migration
Field-level mapping, validation, and rollback between Fat Free CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Fat Free CRM
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Fat Free CRM and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Fat Free CRM stores data across five primary objects — contacts, accounts (called companies), opportunities (called deals), tasks, and notes — with a group-based permission model and a flat custom-field extension mechanism on each entity. Odoo CRM inverts this model: it uses a single res.partner record to represent both individuals and organizations, differentiated by the company_type field, and drives its entire CRM around the crm.lead model where Leads and Opportunities share one object partitioned by pipeline stage. These structural differences mean the migration is not a simple 1:1 field copy — the Odoo res.partner must be created before any crm.lead can reference it, contacts without a primary company must be assigned a placeholder partner record, and opportunity stage names must be mapped value-by-value against Odoo's stage picklist. We handle this through a sequenced API-driven migration: first we export and clean the source data, then we provision Odoo custom fields and stage configurations, then we run the record migration in dependency order (partners before leads, leads before activities), and finally we capture a delta window so records modified during cutover land in Odoo with no gap. Workflows, automations, and email templates do not transfer — FlitStack exports those definitions as human-readable rebuild references for your Odoo admin.
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 Fat Free CRM 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.
Fat Free CRM
Contact
Odoo CRM
res.partner
1:1Fat Free CRM contacts map to Odoo res.partner records where company_type = 'person'. The email, phone, job title, address, and website fields translate directly. The contact's primary company (account_id) becomes the parent partner_id in Odoo. If a contact has no company in Fat Free CRM, we create a stub partner record and flag it for Odoo admin review.
Fat Free CRM
Account (Company)
Odoo CRM
res.partner
1:1Fat Free CRM accounts map to Odoo res.partner where company_type = 'company'. The name, website, phone, industry, employee count, and annual revenue fields map to Odoo partner fields. Revenue and employee count have no native Odoo partner fields — we create x_annual_revenue and x_number_of_employees as ir.model.fields before import.
Fat Free CRM
Opportunity (Deal)
Odoo CRM
crm.lead
1:1Fat Free CRM opportunities map directly to Odoo crm.lead records. The opportunity name becomes the lead subject (name field), amount maps to planned_revenue, and the close date maps to date_deadline. The assigned user resolves by email match to Odoo internal users. Stage mapping requires value-by-value translation from Fat Free stage strings to Odoo crm.stage record IDs.
Fat Free CRM
Pipeline
Odoo CRM
crm.team + crm.stage
1:1Fat Free CRM pipelines have no direct Odoo equivalent. In Odoo, each sales team (crm.team) owns a set of crm.stage records. We create a crm.team for each Fat Free CRM pipeline and configure stage records with sequence order and fold/name matching the source stage strings. Probability values map per stage name.
Fat Free CRM
Pipeline Stage
Odoo CRM
crm.stage
1:1Stage name strings from Fat Free CRM map to Odoo crm.stage name values. Each stage requires probability and sequence number configuration in Odoo. Stages with the same name across multiple Fat Free pipelines collapse to a single Odoo stage name per team unless you request separate pipelines per team in Odoo.
Fat Free CRM
Task
Odoo CRM
mail.activity
1:1Fat Free CRM tasks map to Odoo mail.activity records attached to the parent res.partner or crm.lead. The task name becomes the activity summary, due date maps to date_deadline, and priority (low/medium/high) maps to Odoo's activity_type + priority fields. The assigned user resolves by email match.
Fat Free CRM
Note
Odoo CRM
mail.message
1:1Fat Free CRM notes map to Odoo mail.message records with message_type = 'comment' and subtype = 'note.mt_note'. The note body populates the message body field. We preserve the original created date as write_date on the Odoo message record. Messages attach to the parent res.partner or crm.lead using the res_id + model references.
Fat Free CRM
Campaign
Odoo CRM
crm.team
1:1Fat Free CRM campaigns map to Odoo crm.team records, since Odoo does not have a standalone campaign entity in the CRM module. Team name and description carry over. If the campaign tracks UTM data, those fields migrate as custom fields on the crm.lead.
Fat Free CRM
Group / Team
Odoo CRM
res.groups
1:1Fat Free CRM groups map to Odoo res.groups. We preserve the group name and transfer user membership by matching user emails. Group descriptions are migrated as the res.groups description field when present. If your Fat Free groups are used for record-level access control, Odoo record rules will need manual tuning post-migration. In Odoo, the default group 'User' is created automatically; custom groups from Fat Free are added alongside it.
Fat Free CRM
Tag
Odoo CRM
res.partner.category
1:1Fat Free CRM tags on contacts and accounts map to Odoo res.partner.category (contact category/tag). Tag names map directly, preserving spelling and capitalization. If a tag already exists in Odoo, we reuse the existing category instead of creating a duplicate. Multi-tag membership on a contact creates multiple category entries on the res.partner record. Any tag color data is stored as a custom char field if needed.
Fat Free CRM
Custom Field (Contact)
Odoo CRM
ir.model.fields (res.partner)
1:1Fat Free CRM custom fields on contacts require Odoo ir.model.fields entries on res.partner. Field type translation: string fields map to char, number fields to float or integer, date fields to date, multi-select to char (comma-separated string). We create the custom field in Odoo first, then populate it during the partner import.
Fat Free CRM
Custom Field (Opportunity)
Odoo CRM
ir.model.fields (crm.lead)
1:1Fat Free CRM custom fields on opportunities migrate as Odoo ir.model.fields on crm.lead. Same type-translation logic applies. Odoo reserves field names starting with x_; we prefix all migrated custom field names with x_fcfm_ to avoid conflicts with reserved internal names.
| Fat Free CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Account (Company) | res.partner1:1 | Fully supported | |
| Opportunity (Deal) | crm.lead1:1 | Fully supported | |
| Pipeline | crm.team + crm.stage1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Task | mail.activity1:1 | Fully supported | |
| Note | mail.message1:1 | Fully supported | |
| Campaign | crm.team1:1 | Fully supported | |
| Group / Team | res.groups1:1 | Fully supported | |
| Tag | res.partner.category1:1 | Fully supported | |
| Custom Field (Contact) | ir.model.fields (res.partner)1:1 | Fully supported | |
| Custom Field (Opportunity) | ir.model.fields (crm.lead)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.
Fat Free CRM gotchas
No public REST API forces direct database extraction
Plugin-extended schema may alter core tables
Attachment files live on the host filesystem
Users and groups must be manually remapped 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
Audit Fat Free CRM data and plan Odoo schema
FlitStack AI extracts all Fat Free CRM objects via the platform's database layer or export utilities, capturing standard and custom fields, pipeline stage values, owner IDs, and association tables. We cross-reference the extracted schema against Odoo CRM's crm.lead and res.partner field inventory, identify which Fat Free CRM custom fields need Odoo ir.model.fields entries, and produce a schema setup plan listing the exact fields, field types, and stage records your Odoo admin must create before data lands.
Provision Odoo custom fields and stage configuration
Your Odoo admin (or our team acting with admin credentials) creates the ir.model.fields entries identified in the audit, configures crm.team records per Fat Free pipeline, and sets up crm.stage records with the correct stage names and probability values. Owner resolution runs in parallel: we map each Fat Free user email to an existing Odoo internal user record and flag any unmatched owners for account provisioning.
Migrate partners before leads, leads before activities
Odoo enforces foreign-key ordering: res.partner must exist before crm.lead.partner_id can be populated, and crm.lead must exist before mail.activity.res_id can reference it. We sequence the migration as follows: first accounts (as company-type res.partner), then contacts (as person-type res.partner with parent_id resolved), then crm.lead records with stage_id resolved to Odoo stage IDs, then mail.activity and mail.message records. We preserve original create_date and write_date values throughout so historical timestamps survive the import.
Run a sample migration with field-level diff
A representative slice of records — typically 100–300 spanning contacts, accounts, opportunities, and a few tasks or notes — migrates first. We generate a field-level comparison between the source Fat Free CRM record and the resulting Odoo record, covering every mapped field including custom fields and stage assignments. You review the diff and approve before the full run commits. This step catches stage name mismatches, owner resolution gaps, and custom field type issues before they affect your entire dataset.
Cut over with delta-pickup for in-flight records
The full migration runs against your Odoo instance. FlitStack AI uses scoped read access on Fat Free CRM — your team continues working in the source system throughout. A delta-pickup window (typically 24–48 hours after the main run completes) captures any records created or modified during the cutover. Audit logs record every operation, and a one-click rollback is available if reconciliation against your Fat Free CRM record counts fails.
Platform deep dives
Fat Free CRM
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 Fat Free CRM 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
Fat Free CRM: Not applicable — self-hosted database has no API rate limiting.
Data volume sensitivity
Fat Free CRM 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 Fat Free CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Fat Free CRM 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 Fat Free CRM
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.