CRM migration
Field-level mapping, validation, and rollback between folk and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
folk
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between folk and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from folk to Odoo CRM is a structural migration that involves two fundamentally different data models. folk organizes around Groups as containers with Contacts as the primary record and per-group custom field schemas. Odoo CRM uses a pipeline-and-stage model centered on Leads and Opportunities, with module-level custom fields that apply across the entire CRM. We enumerate every Group's field schema during discovery, map each Group to Odoo Tags or CRM pipeline stages, and resolve the Contact-Company relationship using Odoo's partner model. The absence of a public bulk API in folk means we extract via CSV and import into Odoo through XML-RPC with batch chunking and validation. Workflows, email campaigns, Magic Fields, and enrichment credits do not migrate; we deliver a written inventory of these for your Odoo admin to rebuild or replace post-migration.
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 folk 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.
folk
Contact (person subtype)
Odoo CRM
Contact
1:1folk Contacts of person subtype map to Odoo CRM Contact records. Standard properties (name, email, phone, address) migrate directly. Custom fields migrate to Odoo custom fields on the res.partner model; we enumerate the per-group field schema during discovery and create equivalent custom fields in Odoo before import. The migration user must have write access to the CRM app and Contacts in Odoo. Odoo's partner model treats Contact as a res.partner record with is_company=False.
folk
Contact (company subtype)
Odoo CRM
Contact (is_company=True)
1:1folk Contacts of company subtype map to Odoo CRM Contacts with is_company=True. This is a separate record from person-type contacts at the same organization. We preserve any manually established relationship between folk company-type contacts and their linked person-type contacts by setting the parent_id field on the person Contact to point to the company Contact in Odoo. This reconstructs folk's manual relationship field using Odoo's parent-partner structure.
folk
Group
Odoo CRM
Tag or CRM Stage
lossyfolk Groups function as both organizational containers and segment lists. We offer two migration strategies: (1) Tags — each Group becomes an Odoo CRM Tag and every Contact in that Group receives the Tag via crm.tag.rel. (2) Pipeline Stages — if the Groups map to deal stages, we create Odoo CRM pipeline stages from Groups rather than Tags. The customer chooses during scoping. Multi-Group contacts receive multiple Tags in Odoo.
folk
Pipeline View
Odoo CRM
CRM Pipeline Stage
lossyfolk pipeline views are per-Group. We map each folk Group with a pipeline view to an Odoo CRM stage within the default Odoo sales team pipeline. Stage names, sequence order, and probability percentages transfer to Odoo stage configuration. Odoo allows multiple pipelines via sales teams if the customer needs pipeline isolation.
folk
Note
Odoo CRM
Note
1:1folk Notes attached to Contacts migrate to Odoo CRM internal notes as mail.message records on the res.partner thread. We preserve note body text, creation timestamp, and author attribution where author can be resolved to an Odoo User by email match. Notes that cannot be attributed are created under the admin User with a note indicating source.
folk
Reminder
Odoo CRM
Calendar Event or CRM Activity
1:1folk Reminders carry a due date, assignee, and text. Due dates and text migrate to Odoo CRM as planned activities (calendar.event records with activity_type_id assigned). Assignee mapping requires resolving folk owner email to an Odoo User. Reminders without a resolvable assignee are attached to the Contact record as an unassigned CRM activity for the customer's admin to reallocate.
folk
Tag
Odoo CRM
Tag
1:1folk contact tags migrate as Odoo CRM Tags using the crm.tag model. Tags are stored as string arrays in folk CSV export. We parse each array, deduplicate within the destination, and create Odoo Tags before linking them to Contact records via crm.lead.res.partner.rel. Tag name collisions are resolved by appending a numeric suffix.
folk
Attachment
Odoo CRM
Attachment
1:1folk attachments linked to Contacts export as URLs or files via CSV. We attempt to download source files and re-upload them to Odoo as ir.attachment records linked to the res.partner. File size limits and supported formats follow Odoo's attachment configuration. Attachments that are file references (not downloadable URLs) are flagged for manual re-upload post-migration.
folk
Activity
Odoo CRM
Mail Activity
1:1Activity history present in folk CSV export (calls logged, emails tracked, meetings scheduled) migrates to Odoo CRM as mail.activity records. Each activity type (call, email, meeting) maps to a corresponding Odoo activity_type_id. Activity date and duration preserve. Odoo's activity list on the partner form shows timeline history. We note gaps where folk CSV does not expose activity metadata beyond the contact level.
folk
Custom Field (per-group)
Odoo CRM
Custom Field (module-level)
lossyfolk per-group custom fields require special handling because the same field name may not exist across all Groups. We enumerate every Group's custom field schema during discovery, identify fields that appear in multiple Groups with consistent types, and create Odoo module-level custom fields (ir.model.fields with custom=True) for those. Fields that exist in only one Group are created as Odoo custom fields but may be left unmapped for contacts outside their originating Group. The customer reviews the consolidated field map before migration.
folk
AI Magic Fields
Odoo CRM
(none)
1:1Magic Fields are AI-generated values computed at query time from source data and the folk AI model. They are not stored as persistent records and cannot be exported. We do not migrate Magic Field values. Customers who rely on Magic Field outputs should regenerate them post-migration in Odoo using Odoo's built-in automation rules or a third-party AI enrichment tool of their choosing.
folk
Enrichment Credits
Odoo CRM
(none)
1:1Enrichment data is live-fetched by folk's AI engine and not persistently stored in an accessible format. The enriched field values are not available for export. We do not migrate enrichment credits or their outputs. Post-migration, customers can connect an Odoo-compatible enrichment service (Clearbit, Apollo, or FullContact) as a replacement for folk's enrichment layer.
| folk | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact (person subtype) | Contact1:1 | Fully supported | |
| Contact (company subtype) | Contact (is_company=True)1:1 | Fully supported | |
| Group | Tag or CRM Stagelossy | Fully supported | |
| Pipeline View | CRM Pipeline Stagelossy | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Reminder | Calendar Event or CRM Activity1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Attachment | Attachment1:1 | Fully supported | |
| Activity | Mail Activity1:1 | Fully supported | |
| Custom Field (per-group) | Custom Field (module-level)lossy | Fully supported | |
| AI Magic Fields | (none)1:1 | Not supported | |
| Enrichment Credits | (none)1:1 | Not 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.
folk gotchas
No public bulk API for automated migration
Per-group custom fields create schema fragmentation
Workspace-wide AI credit limits affect all seats
Contact–company linking is not automatic
Email campaign history not exported
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 Group schema enumeration
We audit the source folk workspace across all Groups, enumerating each Group's custom field schema, pipeline view configuration, tag set, and owner assignments. We extract a full contact list per Group via CSV, noting which fields appear in which Groups and identifying conflicts. We pair this with Odoo edition and module selection: Starter ($24.90/user) covers CRM pipeline and lead management; Standard ($49.90/user) adds automated lead scoring and forecasting; Odoo Community (free, self-hosted) is an option if the customer wants on-premise deployment. The discovery output is a written migration scope, a consolidated field map, and a Group-to-Odoo-object mapping recommendation.
Odoo schema provisioning and custom field creation
We provision the Odoo CRM module with the required fields, tags, pipeline stages, and sales team structure before any data loads. Custom fields from folk are created as ir.model.fields with custom=True on the res.partner model. Pipeline stages are created in the correct sequence with probability values matching the source folk pipeline view. Tags are pre-created in Odoo to avoid on-the-fly creation during data load. The schema is validated in an Odoo test database before production deployment.
CSV extraction, deduplication, and transformation
We extract CSV files from each folk Group covering Contacts, Companies, Notes, Reminders, Tags, and Activities. We deduplicate by email address across Groups (keeping the most recently updated record), flag duplicates for customer review, and transform field values to match Odoo's expected data types (phone number formatting, date formats, picklist values). The folk person/company subtype is resolved: person-type contacts become res.partner with is_company=False; company-type contacts become res.partner with is_company=True.
Contact-Company relationship resolution
We process folk company-type Contacts first, creating them in Odoo as res.partner with is_company=True and capturing the new Odoo partner ID. We then process person-type Contacts, resolving any manually established folk relationships to Odoo parent_id references using the captured company partner IDs. Contacts without a folk relationship are migrated as standalone Contacts and flagged for customer review. This step is the primary source of post-migration data quality issues if skipped.
Odoo XML-RPC import in dependency order
We load records into Odoo in dependency order using XML-RPC with batch chunking of 50-100 records per call. Companies (is_company=True partners) load first. Person Contacts load second with parent_id resolved. Notes load as mail.message records on the res.partner thread. Tags are created and linked via crm.tag.rel. Activities load as mail.activity records. Each batch emits a row-count report and a field-level validation summary. Failed records are retried with corrected data; persistently failing records are logged for manual resolution.
Cutover, validation, and automation rebuild handoff
We freeze folk writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a written inventory of folk Workflows, email campaign configurations, and automation logic for the customer's Odoo admin to rebuild using Odoo Studio or server actions. We support a one-week hypercare window where we resolve reconciliation issues. We do not rebuild folk automations as Odoo automated actions inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
folk
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 folk 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
folk: Not publicly documented.
Data volume sensitivity
folk 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 folk to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your folk 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 folk
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.