CRM migration
Field-level mapping, validation, and rollback between Friday CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Friday CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Friday CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Friday CRM to Odoo CRM is a platform-type migration, not a direct record copy. Friday CRM is a standalone free CRM organized around Companies, Contacts, and Deals on a single Kanban pipeline. Odoo is an open-source ERP where CRM is one module among dozens that share the same database and Contact model. We map Friday Companies and Contacts both to Odoo's res.partner model, using the is_company flag to distinguish them and preserve the parent-child relationship. Friday Deals map to Odoo CRM Opportunity records, with pipeline stage names and ordering configured in Odoo CRM before any deal data loads. Custom fields on Companies, Contacts, and Deals require type conversion since Odoo uses a different field type schema. Tags, notes, and activity history migrate to Odoo CRM Tags, Followers, and internal Notes respectively. We do not migrate integration credentials, attached files not present in the export, or any automation or workflow logic.
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 Friday 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.
Friday CRM
Company
Odoo CRM
res.partner (is_company = True)
1:1Friday CRM Company records map to Odoo res.partner with is_company set to True. We map company_name to name, address fields to street, street2, city, state_id, zip, country_id, and preserve any custom field values as Odoo custom fields on the partner record. Company-contact relationships are preserved by resolving the Friday company_id on each Contact and setting the parent_id on the Odoo res.partner record. Friday URL fields migrate to website on the partner record.
Friday CRM
Contact
Odoo CRM
res.partner (is_company = False)
1:1Friday CRM Contact records map to Odoo res.partner with is_company set to False. We map first_name and last_name to firstname and lastname respectively (or combined to name if firstname is not installed), email to email, phone to phone, and address fields to the standard Odoo address block. The parent_id field on the Odoo partner is set to the migrated Friday Company res.partner record to preserve the company-contact relationship. Custom contact fields migrate as Odoo custom fields.
Friday CRM
Deal
Odoo CRM
crm.lead (type = opportunity)
1:1Friday CRM Deals map to Odoo crm.lead records with type = opportunity. The deal name maps to name, deal value maps to expected_revenue, stage maps to stage_id after pipeline stage configuration, and expected close date maps to date_deadline. Partner_id is resolved to the Odoo res.partner record representing the linked Contact or Company. Closed-Lost and Closed-Won status migrate as stage_id transitions to the corresponding Odoo CRM stage.
Friday CRM
Pipeline Stage
Odoo CRM
crm.stage
lossyFriday CRM pipeline stages map to Odoo CRM stages. We extract stage names and display order from the Friday CSV export and configure matching stages in Odoo CRM settings before deal import. Probability percentages from Friday custom fields migrate as Odoo stage probability values. If Friday uses stage-specific probability overrides, these map to custom probability fields on the crm.lead record. Odoo's stage-onchange and sequence ordering replicate the Friday Kanban ordering behavior.
Friday CRM
Custom Field (text, number, date, URL)
Odoo CRM
ir.model.fields (char, float, date, datetime)
1:1Friday CRM custom fields of type text, number, single-line text, URL, and date map to Odoo ir.model.fields with types char, float, integer, char, and date respectively. We pre-create each custom field definition in Odoo through Settings > Technical > Custom Fields or via data file before migration. Field labels from Friday become Odoo field descriptions. Fields are defined on the correct model (res.partner for Company/Contact fields, crm.lead for Deal fields) before any data loads.
Friday CRM
Custom Field (radio select, dropdown)
Odoo CRM
ir.model.fields (selection)
1:1Friday CRM radio select and dropdown fields map to Odoo selection fields. We extract all distinct option values from the Friday export, construct the Odoo selection tuple, and define the field as selection with the value list before migration. If the Friday field uses a default value, we set the default on the Odoo field definition. Selection field migration preserves the exact enumerated values from Friday without re-keying.
Friday CRM
Custom Field (single checkbox)
Odoo CRM
ir.model.fields (boolean)
1:1Friday CRM single checkbox fields map to Odoo boolean fields. We create the boolean field definition on the correct Odoo model (res.partner or crm.lead) before migration. The migrated boolean value is True or False based on the Friday checkbox state. Odoo's boolean fields display as checkboxes in the form view, matching the Friday CRM interaction model.
Friday CRM
Custom Field (multiple checkboxes)
Odoo CRM
Multiple ir.model.fields (boolean) or char
1:manyFriday CRM multiple checkbox fields have no direct Odoo equivalent because Odoo does not support multi-checkbox widgets. We split each multiple-checkbox field into separate boolean fields in Odoo, one per option value from Friday. The field labels concatenate the Friday field name with the option label for clarity. An alternative approach using a char field with comma-separated values is available if boolean explosion is not desired.
Friday CRM
Tag
Odoo CRM
crm.tag
lossyFriday CRM tags on Contacts and Deals map to Odoo CRM Tags. We extract all distinct tag values from the Friday export, create corresponding crm.tag records, and attach them to crm.lead records via the tag_ids many2many relationship. If Friday uses the same tag on both Contacts and Deals, we apply the tag to both crm.lead records and res.partner records in Odoo. Tag deduplication (case normalization, whitespace trimming) happens during the extract phase.
Friday CRM
Note
Odoo CRM
mail.message (Followers)
1:1Friday CRM notes attached to Contacts and Deals migrate to Odoo CRM chatter as mail.message records with message_type = notification. We preserve the note body as the message body, the creation timestamp as write_date, and link the message to the crm.lead or res.partner record via the res_id and model fields. The author is set to the migrating user or a system user if the Friday note has no attributed owner. Chatter visibility in Odoo is native and requires no additional configuration.
Friday CRM
Owner
Odoo CRM
res.users
1:1Friday CRM owners referenced on Deals and Contacts map to Odoo res.users by email address match. We extract every distinct owner email from the Friday export and match against Odoo destination User records. Owners without a matching Odoo User are held in a reconciliation queue; the customer's Odoo admin provisions missing users before record migration proceeds. OwnerId on crm.lead migrates as user_id on the opportunity record in Odoo, controlling pipeline assignment and activity ownership.
Friday CRM
Attachment
Odoo CRM
ir.attachment
1:1Friday CRM does not expose file attachments via its documented CSV export or public API. We flag this limitation in the discovery phase and recommend that users export attachments manually through the Friday CRM interface before migration. We do not migrate attachment data as part of the standard migration scope. For customers with critical attachments, we provide a written inventory of attachment locations in Friday CRM so that the admin can re-upload them manually to Odoo after migration.
| Friday CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Company | res.partner (is_company = True)1:1 | Fully supported | |
| Contact | res.partner (is_company = False)1:1 | Fully supported | |
| Deal | crm.lead (type = opportunity)1:1 | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Custom Field (text, number, date, URL) | ir.model.fields (char, float, date, datetime)1:1 | Fully supported | |
| Custom Field (radio select, dropdown) | ir.model.fields (selection)1:1 | Fully supported | |
| Custom Field (single checkbox) | ir.model.fields (boolean)1:1 | Fully supported | |
| Custom Field (multiple checkboxes) | Multiple ir.model.fields (boolean) or char1:many | Fully supported | |
| Tag | crm.taglossy | Fully supported | |
| Note | mail.message (Followers)1:1 | Fully supported | |
| Owner | res.users1:1 | Fully supported | |
| Attachment | 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.
Friday CRM gotchas
No mobile app means no mobile access during migration cutover
CSV export may not capture full activity history
Custom field types may require reconfiguration in destination CRM
No documented API rate limits or bulk endpoints
Integrations must be re-established manually in destination CRM
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 Friday export audit
We audit the Friday CRM export ZIP to identify which objects and fields are present, which are absent, and which require custom field type mapping. We count Companies, Contacts, Deals, pipeline stages, custom field definitions (with their types), tags, and note volumes. We detect any data quality issues (duplicate records, missing required fields, inconsistent date formats) and document them in a data quality report. We also inventory any connected integrations and OAuth tokens that will not survive migration. The discovery output is a written migration scope and a data quality sign-off form for the customer to approve before schema design begins.
Odoo CRM schema configuration
We configure Odoo CRM in the destination instance before any data loads. This includes installing the CRM module from the Apps menu, defining pipeline stages to match the Friday stage names and ordering, and pre-creating all custom field definitions on res.partner (for Company and Contact fields) and crm.lead (for Deal fields). Custom fields use Odoo's Settings > Technical > Custom Fields interface or XML data files for repeatable deployment. We configure the Odoo email alias for incoming email-to-lead if the customer plans to use that feature. The configuration runs in the production Odoo instance or a Sandbox clone for validation first.
Staging migration and reconciliation
We run a full migration into an Odoo Sandbox or a parallel database clone using the production data volume from Friday. The customer's team reconciles record counts, spot-checks 25-50 records for field accuracy, verifies that custom field values rendered correctly in Odoo, and confirms that the pipeline stage configuration matches the Friday Kanban view. Any mapping corrections, missing fields, or stage ordering issues are resolved in this phase. Sign-off on the staging migration is required before the production cutover begins.
Owner reconciliation and user provisioning
We extract every distinct Friday CRM owner referenced on Deals, Contacts, and Companies and match by email against the Odoo destination's res.users table. Any Friday owner without a matching Odoo User is flagged in a reconciliation report. The customer's Odoo admin provisions the missing users before production migration. OwnerId on Friday Deals maps to user_id on crm.lead in Odoo, controlling opportunity assignment. Migration cannot proceed past user reconciliation because user_id is a required field on crm.lead in most Odoo CRM configurations.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (provisioned, not migrated), res.partner records for Companies first (with is_company = True), res.partner records for Contacts second (with parent_id set to the Company partner), crm.lead Opportunities third (with partner_id and user_id resolved), crm.tag records fourth, mail.message records for Notes fifth. Each phase emits a row-count reconciliation report. Any records rejected due to validation rules or missing required fields are logged, corrected, and retried in a follow-up pass before the next phase begins.
Cutover, validation, and integration handoff
We freeze Friday CRM writes during the cutover window, run a final delta migration of any records modified during the migration window, then mark Odoo as the system of record. We validate that the pipeline stage distribution in Odoo matches the pre-migration distribution in Friday within a 5% tolerance. We deliver a written inventory of all detected Friday integrations requiring rebuild, a custom field mapping reference, and a stage-by-stage pipeline comparison report. We provide a one-week hypercare window to resolve post-migration reconciliation issues. Workflow rebuild, integration configuration, and Odoo Studio customization are outside standard migration scope and can be scoped as a separate engagement.
Platform deep dives
Friday 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 Friday 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
Friday CRM: Not publicly documented.
Data volume sensitivity
Friday 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 Friday CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Friday 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 Friday 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.