CRM migration
Field-level mapping, validation, and rollback between Capsule CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Capsule CRM
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Capsule CRM and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Capsule CRM to Odoo CRM requires resolving a fundamental schema difference: Capsule unifies individual contacts and organisations under a single Party object, while Odoo separates them into Contact and Company records with a many-to-one relationship. We split Parties at migration time using the Party type field, creating Odoo Company records for Organisations and Contact records for individuals linked via the company_id lookup. Capsule Opportunities map to Odoo crm.lead with pipeline stage names, probabilities, expected close dates, and values preserved. Activities (emails, calls, meetings, notes) carry forward as mail.message records linked to the parent Contact, Company, or Opportunity. Capsule Projects migrate as Odoo Project records with milestones translated to Project Tasks bearing a milestone flag; Workflow Automations do not migrate and are documented for Odoo Studio rebuild. The Odoo Community edition provides a free, self-hosted destination; Odoo Online and Enterprise add per-user SaaS licensing from €25 per user per month. We do not migrate automations, forms, or reports as code; we deliver written inventories for the customer's admin to rebuild.
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 Capsule 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.
Capsule CRM
Party (Organisation)
Odoo CRM
Company (res.partner, company_type = company)
1:1Capsule Organisation Parties map to Odoo Company records (res.partner with company_type = company). Organisation name becomes the Company name field. Website, address, phone, industry, and any Organisation-level custom fields carry forward. We create Companies first so that the company_id lookup is satisfied when Contact records are inserted in the next phase.
Capsule CRM
Party (Contact)
Odoo CRM
Contact (res.partner, company_type = individual)
1:manyCapsule Contact Parties map to Odoo Contact records (res.partner with company_type = individual) linked to a Company via the company_id field. We resolve the parent Organisation by matching on Organisation name or domain. Individual name, email, phone, title, tags, and custom fields carry forward. Any Capsule Contact without a parent Organisation creates a standalone Odoo Contact.
Capsule CRM
Opportunity
Odoo CRM
Opportunity (crm.lead)
1:1Capsule Opportunities map to Odoo crm.lead with type = opportunity. Pipeline name becomes the Odoo Pipeline name; stage name becomes the Stage value. Probability, expected close date, value, currency, and owner carry forward. Where Capsule Opportunities link to a Party, we carry the partner_id reference after the Company and Contact records are created.
Capsule CRM
Opportunity Stage
Odoo CRM
Opportunity Stage (crm.stage)
lossyCapsule pipeline stages map to Odoo CRM Stage records. We pre-create Odoo stages matching Capsule stage names and sequence order, and set the probability percentage on each stage to match Capsule. Stage is configured in the destination Odoo database before any Opportunity records are migrated.
Capsule CRM
Case
Odoo CRM
Ticket (helpdesk.ticket) or CRM Ticket
1:1Capsule Cases map to Odoo Helpdesk Tickets if the Helpdesk module is activated, or to CRM Tickets otherwise. Status, priority, assignee, description, and linked Party reference carry forward. Case conversation history migrates as mail.message records linked to the Ticket. Custom fields on Cases resolve via the field-definition endpoint before value casting.
Capsule CRM
Project
Odoo CRM
Project (project.project)
1:1Capsule Projects (available on Starter and above) map to Odoo Project. Project name, description, status, and linked Opportunity reference carry forward. We carry the Opportunity mapping via a custom Odoo field so relationship context is preserved after migration. Workflow Automations attached to Projects do not migrate and are documented for Odoo Studio rebuild.
Capsule CRM
Milestone
Odoo CRM
Project Task (project.task, milestone flag)
1:1Capsule Milestones within Projects map to Odoo Project Tasks with a milestone flag set. Due dates and completion status migrate. Milestone ordering is preserved via the Odoo Task sequence field. The parent Project is created first so the task hierarchy is satisfied. Project Milestones without a parent Project become standalone Odoo Tasks.
Capsule CRM
Tag
Odoo CRM
Tag (project.tags) or Custom Field
lossyCapsule Tags are flat labels applied to Parties, Opportunities, and Cases. We translate tag names 1:1 into Odoo Tags (project.tags) or evaluate them for multi-select picklist migration. The customer confirms tag strategy during scoping: tag-as-tag versus tag-as-custom-field.
Capsule CRM
User
Odoo CRM
User (res.users)
1:1Capsule Users and Owners map to Odoo res.users by email address match. We flag any Capsule Owner without a matching Odoo User in a reconciliation queue. The customer's Odoo admin provisions missing Users before record import begins. Inactive Capsule Owners map to archived Odoo Users with records reassigned to the active Owner.
Capsule CRM
Activity: Email, Call, Meeting, Note
Odoo CRM
mail.message
1:1Capsule Activities (email, call, meeting, note) migrate to Odoo mail.message records linked to the parent Contact, Company, or Opportunity via the res_id and model fields. Activity type maps to the message_type field. Direction (inbound/outbound), timestamp, and body text carry forward. Activity count per record is preserved. Email attachments require separate file extraction and ir.attachment re-upload, scoped separately from the base migration.
Capsule CRM
Task
Odoo CRM
Project Task
1:1Capsule Tasks migrate to Odoo Project Tasks linked to the relevant Contact, Company, or Opportunity via the project_id and partner_id fields. Due date, assignee (via User mapping), status, and description transfer. Completed status maps to the Odoo stage state. Tasks without a linked Party or Opportunity become standalone Odoo Tasks.
Capsule CRM
Custom Field
Odoo CRM
Custom Field (ir.model.fields)
lossyCapsule Custom Fields on Parties, Opportunities, and Cases are pre-created as Odoo custom fields via Settings > Technical > Custom Fields before any record migration begins. List-type Capsule fields become Odoo selection fields with options matching Capsule field options fetched from /fields/definitions. Text, date, and numeric fields map to char, date, or float respectively. Tag-based Capsule custom fields require separate field-definition resolution before type casting.
| Capsule CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Party (Organisation) | Company (res.partner, company_type = company)1:1 | Fully supported | |
| Party (Contact) | Contact (res.partner, company_type = individual)1:many | Fully supported | |
| Opportunity | Opportunity (crm.lead)1:1 | Fully supported | |
| Opportunity Stage | Opportunity Stage (crm.stage)lossy | Fully supported | |
| Case | Ticket (helpdesk.ticket) or CRM Ticket1:1 | Fully supported | |
| Project | Project (project.project)1:1 | Fully supported | |
| Milestone | Project Task (project.task, milestone flag)1:1 | Fully supported | |
| Tag | Tag (project.tags) or Custom Fieldlossy | Fully supported | |
| User | User (res.users)1:1 | Fully supported | |
| Activity: Email, Call, Meeting, Note | mail.message1:1 | Fully supported | |
| Task | Project Task1:1 | Fully supported | |
| Custom Field | Custom Field (ir.model.fields)lossy | 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.
Capsule CRM gotchas
Capsule API rate limit is 4,000 requests per window
Free plan caps at 250 contacts and 2 users
Custom fields require separate field-definition API calls
Deleted records require a separate endpoint and are not returned in standard lists
Projects and Workflow Automations are gated by plan tier
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 scoping
We audit the source Capsule account across plan tier, record counts per entity type (Parties, Opportunities, Cases, Projects), custom field definitions, tag usage, active Workflow Automations, and API rate limit status. We confirm the destination Odoo deployment (Community self-hosted, Odoo Online, or Enterprise) and which modules are activated (CRM, Project, Helpdesk). We also confirm whether attachment preservation and deleted record recovery are in scope. The discovery output is a written migration scope with object-priority list and a recommended Odoo module configuration.
Schema design in Odoo
We create the destination schema in the Odoo database before any data migration begins. This includes activating required modules (CRM, Project, Helpdesk), pre-creating custom fields via Settings > Technical > Custom Fields, configuring CRM pipeline stages to match Capsule stage names and probabilities, setting up Odoo Tags matching Capsule tag names, and configuring selection field values for list-type custom fields resolved from the Capsule field-definition endpoint. Schema is deployed in a Sandbox environment first for validation with the customer's Odoo administrator.
Sandbox migration and reconciliation
We run a full migration into an Odoo Sandbox database using production-equivalent data volume. The customer's Odoo administrator reconciles record counts (Contacts in, Companies in, Opportunities in, Activities in), spot-checks 25-50 records against the Capsule source, and validates custom field values and tag assignments. The administrator signs off the schema and mapping before production migration begins. Any corrections to field types, stage mapping, or tag strategy happen in Sandbox, not in production.
Owner reconciliation and User provisioning
We extract every distinct Capsule User and Owner referenced on Parties, Opportunities, Cases, and Tasks and match by email against Odoo res.users. Owners without a matching Odoo User go to a reconciliation queue. The customer's Odoo admin provisions missing Users (active or portal depending on the user's role) before record import begins. Migration cannot proceed past this step because Odoo assignee and owner fields require a valid res.users reference on crm.lead, project.task, and helpdesk.ticket.
Production migration in dependency order
We run production migration in record-dependency order: Companies first (from Capsule Organisations), Contacts second (with company_id resolved via Organisation name match), Opportunities third (with partner_id and user_id resolved), Cases and Tickets fourth (with Party and Opportunity references), Projects fifth (with linked Opportunity preserved in a custom field), Milestones as Tasks, Activities via mail.message, and Custom Fields last with all parent records in place. Each phase emits a reconciliation report showing record counts and any errors before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Capsule 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 the Workflow Automation and Project Automation inventory document to the customer's admin team with Odoo Studio or ir.actions.server equivalents documented per automation. We support a one-week hypercare window for reconciliation issues raised by the customer's team. We do not rebuild Capsule Workflow Automations as Odoo automations inside the migration scope; that work is a separate engagement.
Platform deep dives
Capsule CRM
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 Capsule CRM 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
Capsule CRM: 4,000 requests per rate limit window; reset time in X-RateLimit-Reset header.
Data volume sensitivity
Capsule 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 Capsule CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Capsule 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 Capsule 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.