CRM migration
Field-level mapping, validation, and rollback between OneSuite and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
OneSuite
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between OneSuite and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from OneSuite to Odoo CRM is a platform migration that also requires restructuring how your data maps to a different data model. OneSuite collapses CRM, project management, and invoicing into a single workspace; Odoo CRM is one module inside a modular ERP that also covers accounting, inventory, manufacturing, HR, and e-commerce. We resolve the Lead-to-Opportunity conversion by creating Odoo Leads first and either converting them to Opportunities during migration or preserving them as a pipeline queue for sales reps to work. OneSuite's lack of a documented bulk API forces us to use its officially supported CSV and JSON import paths, chunking large datasets into sequenced files. Projects from OneSuite map to Odoo Project tasks if the Project module is active, or to a custom Project object if only the CRM module is installed. We do not migrate automations, workflows, client portal configurations, or Stripe/Quickpay payment integrations; we deliver a written inventory of these for your admin to rebuild in Odoo Studio.
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 OneSuite 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.
OneSuite
Client
Odoo CRM
Contact + Company (partner_id)
1:1OneSuite Client records map directly to Odoo Contact with a partner_id link to the same record as a Company (res.partner with is_company=True). We extract the primary contact role from OneSuite's Client data and set the contact's function field accordingly. Client revenue data, social links, and ICP status migrate as typed Odoo fields or custom fields defined in Odoo Studio before migration. The clientTier slug from OneSuite (e.g., tierOne) remaps to a custom selection field that we pre-create on the res.partner model.
OneSuite
Lead
Odoo CRM
crm.lead
1:1OneSuite Leads map to Odoo crm.lead with the pipeline stage name preserved in the stage_id field. Lead source attribution and scoring values migrate to the Odoo lead's source and priority fields. We create the Odoo pipeline stages matching OneSuite's stage names and order before the Lead import begins. Scores exceeding typical ranges are stored as a custom float field since Odoo's standard priority field is a selection.
OneSuite
Lead
Odoo CRM
crm.lead (converted to Opportunity)
lossyIf the customer wants Leads pre-converted to Opportunities, we create Opportunities from Leads during migration by setting the partner_id (Contact/Company) lookup, the planned_revenue amount, and the stage_id matching OneSuite's deal stage. The Lead-to-Opportunity conversion in Odoo also creates a lead_id link; we preserve the original OneSuite lead_id in a custom field for audit trails. This step requires the Odoo CRM app to be installed and the pipeline stages to be pre-created.
OneSuite
Project
Odoo CRM
project.project or project.task
1:1OneSuite Projects map to Odoo project.project records if the Odoo Project app is active, or to project.task records if only the CRM app is installed. The Client-to-Project relationship in OneSuite becomes the partner_id on the Odoo project or task. Project milestones map to Odoo project milestone records if the Odoo version supports them; otherwise they are stored as task names with a milestone custom field. We flag any Projects with automation triggers that cannot be replicated automatically.
OneSuite
Invoice
Odoo CRM
account.move
1:1OneSuite Invoices map to Odoo account.move records with move_type='out_invoice'. We map line items, tax rates, payment status, and currency directly. Multi-currency invoices require the Odoo Accounting app and multi-currency configuration to be active. We flag any Invoices with complex discount rules, custom tax jurisdictions, or Stripe/Quickpay payment metadata that may require manual reconciliation on the Odoo side. Paid status migrates with the payment reconciliation recorded against the bank statement.
OneSuite
Document
Odoo CRM
ir.attachment (metadata only)
1:1OneSuite Documents associated with Clients or Projects migrate as Odoo ir.attachment metadata records (name, res_model, res_id, file_size, mimetype). Binary file content transfer is limited by OneSuite's storage tier cap (30 GB Freelancer, 60 GB Growing Agency); we pre-scan total file volume and flag any account at or exceeding its tier limit. In those cases we migrate document URLs and metadata only, deferring binary transfer to a post-migration file hosting step.
OneSuite
File
Odoo CRM
ir.attachment (metadata only)
1:1OneSuite Files attached to Projects, Tasks, or Invoices migrate as ir.attachment metadata records. We map the file URL, name, and type but do not stream binary content if the account is approaching its storage cap. File metadata is preserved so that the admin can reattach files from OneSuite's export archive after migration if binary content was deferred.
OneSuite
Member
Odoo CRM
res.users
1:1OneSuite Members map to Odoo res.users records. We resolve Members by email address match. Any Member without a matching Odoo user is held in a reconciliation queue for the admin to provision before record import resumes. Member assignments to Projects, Clients, and Invoices migrate as Odoo's follower mechanism (mail.followers) on the relevant record.
OneSuite
Pipeline Stage
Odoo CRM
crm.stage
lossyOneSuite's user-defined pipeline stages migrate to Odoo crm.stage records with the same name and sequence order. Stages with custom automation rules (auto-assignment, scoring triggers) are flagged for manual reconfiguration in Odoo Studio. The probability percentage on each stage migrates as a custom float field if the customer's Odoo version uses the older probability model, or is omitted if the customer uses the new Odoo 17+ stage probability approach.
OneSuite
Template (Project)
Odoo CRM
project.project (template)
1:1OneSuite Project templates migrate as Odoo project.project records with the is_template flag set to True. Template field structure and default values transfer; template automation logic (auto-assignment on creation, milestone triggers) cannot be replicated automatically and is flagged in the handoff document for Odoo Studio rebuild.
OneSuite
Template (Document)
Odoo CRM
ir.actions.report (metadata)
1:1OneSuite Document templates migrate as Odoo report template metadata (ir.actions.report) if the customer uses Odoo Studio's document template builder. We transfer template field structure and conditional logic as a written specification for the admin to reconstruct in Odoo Studio, because template rendering logic is not migratable as data.
OneSuite
Custom Field (flattened)
Odoo CRM
ir.model.fields (custom)
lossyOneSuite's custom fields are flattened directly onto entities with their original slug as the property key (e.g., a field named client-tier appears as clientTier on the Client record). We parse each slug, remap it to the equivalent Odoo field name, and pre-create the custom field definition in Odoo Studio before migration runs. Fields that do not have a matching Odoo type are flagged for the admin to configure as selection fields or relational fields. This step is required before any record import to ensure custom field values are not dropped.
| OneSuite | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | Contact + Company (partner_id)1:1 | Fully supported | |
| Lead | crm.lead1:1 | Fully supported | |
| Lead | crm.lead (converted to Opportunity)lossy | Fully supported | |
| Project | project.project or project.task1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| Document | ir.attachment (metadata only)1:1 | Fully supported | |
| File | ir.attachment (metadata only)1:1 | Fully supported | |
| Member | res.users1:1 | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Template (Project) | project.project (template)1:1 | Fully supported | |
| Template (Document) | ir.actions.report (metadata)1:1 | Fully supported | |
| Custom Field (flattened) | ir.model.fields (custom)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.
OneSuite gotchas
No documented bulk API forces CSV or JSON UI import for migrations
Storage tier caps apply to imported file content and attachments
API custom field flattening requires slug-aware remapping
Lead count capped on lower tiers may require plan upgrade before migration
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 tier audit
We audit the source OneSuite account across plan tier, record counts (Clients, Leads, Projects, Invoices, Documents, Members), custom field slugs, pipeline stage names, storage usage, and active automation rules. We pair this with a review of the destination Odoo CRM instance: which Odoo apps are installed (CRM, Project, Accounting), which Odoo edition is active (Community or Enterprise), and whether Odoo Studio is available for custom field creation. The discovery output is a written migration scope, a list of custom fields to pre-create in Odoo Studio, and a storage pre-scan report flagging any account approaching its tier cap.
Schema design and custom field pre-creation
We design the destination schema in Odoo before any data moves. This includes creating all custom fields identified during discovery (matching OneSuite slugs to typed Odoo fields in Odoo Studio), configuring pipeline stages matching OneSuite's stage names and sequence, setting up the Lead-to-Opportunity conversion workflow if the customer wants Opportunities pre-created, and creating the Project structure if the Odoo Project app is active. Schema is validated in an Odoo test database before production migration begins. Any field type mismatches are resolved here.
CSV chunking and dependency ordering
Because OneSuite lacks a bulk API, we extract data through its documented CSV and JSON export paths. We sequence the export in dependency order: Members first (to resolve user IDs), then Clients, then Leads, then Projects, then Invoices, then Documents. Each entity is chunked into files of a size that respects OneSuite's import buffer. We validate row counts after each export and reconcile against the discovery count before proceeding to import.
Owner and user reconciliation
We extract every distinct OneSuite Member referenced on Clients, Projects, and Invoices and match by email address against the destination Odoo instance's res.users table. Any Member without a matching Odoo user is held in a reconciliation queue for the admin to provision before record import resumes. This step is a prerequisite for partner_id and follower resolution on all subsequent imports.
Production migration in dependency order
We run production migration in strict record-dependency order: Users (validated), Companies and Contacts (from OneSuite Clients), Leads (with stage_id resolved), Opportunities (if the Lead-to-Opportunity conversion step is included), Projects (with partner_id resolved), Invoices (with partner_id and payment reconciliation), Documents and Files (metadata and URLs, with binary deferred if storage cap is exceeded), and Custom Field values (mapped to the pre-created Studio fields). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze OneSuite writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the automation and portal configuration inventory document to the customer's admin team for Odoo Studio rebuild. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild OneSuite automations as Odoo automated actions inside the migration scope; that is a separate engagement.
Platform deep dives
OneSuite
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 OneSuite 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
OneSuite: Not publicly documented.
Data volume sensitivity
OneSuite 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 OneSuite to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your OneSuite 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 OneSuite
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.