CRM migration

Migrate from CentraHub CRM to Odoo CRM

Field-level mapping, validation, and rollback between CentraHub CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

CentraHub CRM logo

CentraHub CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

69%

9 of 13

objects map 1:1 between CentraHub CRM and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from CentraHub CRM to Odoo CRM is a migration shaped by the absence of a public API on the source side. CentraHub has no documented REST endpoint for third-party access, so we work with its per-module CSV export, reconstruct record relationships from ID columns, and push into Odoo via its XMLRPC and JSON-RPC API endpoints. The core object model maps cleanly — CentraHub Accounts become Odoo Partners, Deals become Odoo CRM Leads, and Contacts attach to the Partner record via address roles — but pipeline stages, custom fields, and activity history require careful transformation work before insert. We do not migrate CentraHub Workflows, automations, or reports as code; we deliver a written inventory of every automation for the customer's admin to rebuild in Odoo Studio or with an Odoo partner. The 5-user minimum on every paid CentraHub tier also makes it a poor fit for small teams, which is a common trigger for this migration path.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

CentraHub CRM logo

CentraHub CRM

What's pushing teams away

  • Minimum 5-user seat requirement on every paid tier locks out solo practitioners and very small teams that only need 1–3 licenses.
  • Initial setup support is reported as not meeting expectations, with reviewers citing poor onboarding assistance during configuration.
  • Lack of publicly documented API makes programmatic exports difficult — teams resort to CSV manual exports which strip relationships between records.
  • Brand rebranding from CentraHub CRM to Focus Softnet creates uncertainty about long-term product direction and support continuity.
  • Limited English-language community presence and sparse Reddit/G2 discussion make peer troubleshooting difficult for non-Indian users.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How CentraHub CRM objects map to Odoo CRM

Each row shows how a CentraHub 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.

CentraHub CRM

Lead

maps to

Odoo CRM

crm.lead (type: lead)

1:1
Fully supported

CentraHub Leads map directly to Odoo crm.lead records with type=lead. Lead source, status, owner assignment, and any lead-score custom fields migrate as fields on crm.lead. The Odoo lead create date is set to the original CentraHub creation timestamp. We resolve the owner by email lookup against Odoo res.users and flag any owner without a matching user in the reconciliation queue.

CentraHub CRM

Account

maps to

Odoo CRM

res.partner (company type)

1:1
Fully supported

CentraHub Accounts map to Odoo res.partner records with is_company=True. The Account ID from CentraHub is preserved in a custom field centrahub_id__c on the Odoo partner record for audit traceability. Account is created before any Contact import so that the parent_partner_id lookup is satisfied at Contact insert time.

CentraHub CRM

Contact

maps to

Odoo CRM

res.partner (individual)

1:1
Fully supported

CentraHub Contacts map to Odoo res.partner records with is_company=False, linked to their parent Account via parent_id pointing to the Odoo res.partner created from the CentraHub Account. Contact name, email, phone, job title, and address fields map directly. We resolve the parent Account reference by matching the CentraHub account_id against the centrahub_id__c custom field we set on import.

CentraHub CRM

Deal

maps to

Odoo CRM

crm.lead (type: opportunity)

1:1
Fully supported

CentraHub Deals map to Odoo crm.lead records with type=opportunity. The deal amount becomes crm.lead.planned_revenue, the close date becomes date_deadline, and the deal name becomes the Odoo lead name. We link each opportunity to its primary contact (res.partner) via partner_id and to its owning team via team_id resolved from the CentraHub pipeline assignment.

CentraHub CRM

Pipeline and Deal Stages

maps to

Odoo CRM

crm.team + crm.stage

lossy
Fully supported

Each CentraHub deal pipeline maps to a separate Odoo crm.team (sales team), and the CentraHub stage names map to Odoo crm.stage records scoped to that team via team_id. Probability percentages from CentraHub stage settings migrate to stage sequence order and probability. If CentraHub has a single pipeline, we create one crm.team and map all stages within it.

CentraHub CRM

Task

maps to

Odoo CRM

project.task (standalone)

1:1
Fully supported

CentraHub standalone Tasks map to Odoo project.task records created in a dedicated migration project (not attached to a sales opportunity). Task title, due date (date_deadline), priority, and status map directly. Custom task types and priority values are mapped via a value translation table built during scoping. Tasks linked to specific Accounts or Contacts in CentraHub carry the Odoo partner_id reference resolved via centrahub_id__c lookup.

CentraHub CRM

Appointment

maps to

Odoo CRM

calendar.event

1:1
Fully supported

CentraHub Appointments map to Odoo calendar.event records. Start datetime, end datetime, location, and description migrate directly. We normalize all timestamps to UTC before insert and flag any appointment with a start time more than 24 hours in the past that would fall outside Odoo's default calendar window. Attendee resolution links calendar.attendee records to Odoo res.partner records via email match.

CentraHub CRM

Activity (Call, Email, Note)

maps to

Odoo CRM

mail.message

1:1
Fully supported

CentraHub Activity records (calls, emails, notes) map to Odoo mail.message records with message_type set to email, phonecall, or comment respectively. The message body and timestamp migrate directly. We resolve the message's res_id and model using the CentraHub record type and ID: contacts and accounts resolve to res.partner, leads and deals resolve to crm.lead. Activity history is reconstructed by inserting mail.message in chronological order and verifying the chatter thread count matches the source record count.

CentraHub CRM

Custom Fields

maps to

Odoo CRM

Custom Fields on res.partner and crm.lead

lossy
Mapping required

CentraHub per-module custom fields (text, number, picklist, date, phone, email, website) map to Odoo custom fields created via Settings > Technical > Database Structure > Fields before migration begins. We extract the full CentraHub custom field schema per module during discovery, map each to an Odoo field type (char, float, selection, date, char, char, char respectively), and create the fields in Odoo before any data import. CentraHub's loose type enforcement means we validate all custom field values against the declared type and flag any record with a mismatched value before writing to Odoo.

CentraHub CRM

Tag

maps to

Odoo CRM

crm.tag (via crm.lead.tag_ids)

1:1
Fully supported

CentraHub tags applied across objects migrate to Odoo crm.tag records (for lead/opportunity tags) or a custom tag field on res.partner for contact-level tags. We extract the full tag taxonomy from CentraHub, create matching tags in Odoo, and map tag applications via tag_ids on crm.lead or a custom partner_tags field on res.partner. Tags with no exact Odoo equivalent are held for the customer to resolve during acceptance testing.

CentraHub CRM

Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

CentraHub attachments are accessed via the CentraHub-Dropbox and CentraHub-Box pre-built connectors, which store files externally rather than inside the CentraHub database. We download attachment files to temporary storage, map each to its parent Odoo record (res.partner or crm.lead) via the Odoo ir.attachment API, and re-attach them post-import. Any attachment with no accessible URL (connector not active, file deleted from cloud storage) is logged with the CentraHub record reference for manual retrieval.

CentraHub CRM

Email Campaign

maps to

Odoo CRM

Not migrated (read-only inventory provided)

lossy
Fully supported

CentraHub email campaign records with historical send, open, and click data are exported as a structured JSON read-only inventory. Active campaign state (scheduled sends, active sequences, cadence rules) cannot migrate because Odoo Email Marketing requires reconfiguration of templates, audiences, and send schedules. We deliver a written campaign inventory listing every CentraHub campaign, its target audience segment, and its send history for the customer's admin to rebuild in Odoo Email Marketing or a dedicated platform.

CentraHub CRM

Workflow

maps to

Odoo CRM

Not migrated (written inventory provided)

lossy
Fully supported

CentraHub Workflows are stored as structured JSON with field-ID references (not field names), which break silently if any mapped field is renamed during migration. We export all workflow definitions as structured JSON during discovery and deliver them as a written inventory: trigger type, condition fields, condition operators, and actions. The customer's admin rebuilds these in Odoo Automated Actions (server actions triggered by on_create, on_write, or on_cron) or Odoo Studio workflows post-migration. This is outside standard migration scope.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

CentraHub CRM logo

CentraHub CRM gotchas

High

Five-user minimum applies to every paid tier

High

Workflows reference field IDs, not field names

High

No documented public API for bulk exports

Medium

Rebrand to Focus Softnet causes support and documentation drift

Medium

Custom field data type enforcement is loose on import

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • No CentraHub API means CSV export with no relationship API

    CentraHub CRM does not publish API documentation for third-party access. All exports use the platform's per-module CSV export, which does not include attachment URLs or historical activity logs in the base export. CSV rows contain CentraHub's internal ID columns but no foreign key resolution for related records. We request full data exports from the customer's CentraHub instance, reconstruct the relationship graph from the exported ID columns (Account-Contact, Deal-Activity links), and push into Odoo via XMLRPC. A migration that would take hours via API takes days via manual CSV parsing and relationship mapping. We account for this in scoping and pricing before any work begins.

  • CentraHub workflows break silently on field rename

    CentraHub Workflows store field references by internal ID, not human-readable field names. Renaming a custom field during migration causes every workflow condition referencing that field to silently break — no error is thrown. We extract all workflow definitions as structured JSON during discovery, cross-reference field IDs against the migration field map, and flag every workflow that will break if a mapped field is renamed. We preserve the original CentraHub field ID in a custom field on the Odoo record so that any future Odoo Studio workflow referencing the field can cross-check against the CentraHub ID.

  • Odoo requires strict field type enforcement on import

    Odoo enforces field data types at insert time. CentraHub custom fields allow loose type assignment — a text string can be stored in a number field with no validation error. We validate every CentraHub custom field value against its declared type before transforming for Odoo. Records with type mismatches (e.g., a non-numeric string in a numeric CentraHub field) are flagged and held in a correction queue. Without this step, Odoo rejects the import batch and the migration stalls on the first mismatched record.

  • Odoo crm.lead kanban pipeline needs pre-migration configuration

    Odoo CRM uses a kanban view organized by crm.team and crm.stage. If the customer has multiple CentraHub pipelines, we must pre-create the corresponding Odoo crm.team records and stage values before any opportunity data can be imported, because the stage_id and team_id on crm.lead are required fields at insert. Skipping this step results in opportunities being inserted without pipeline context, requiring manual reassignment after import. We configure all pipeline and stage values in Odoo during the schema setup phase before any record migration begins.

  • Activity history requires mail.message insertion after parent records

    Odoo mail.message records require a valid res_id (the ID of the parent record) and model (the Odoo model name) at insert time. Because activity records in CentraHub are linked to Accounts, Contacts, and Deals by internal ID, we must first migrate all parent records (res.partner from Accounts and Contacts, crm.lead from Deals) and capture their new Odoo IDs before inserting mail.message records. The activity migration phase therefore runs as a second pass after the parent record phases, and any CentraHub activity record that references a parent not yet migrated is held for the second pass.

Migration approach

Six steps for a successful CentraHub CRM to Odoo CRM data migration

  1. Discovery and CentraHub data export

    We request full per-module CSV exports from the customer's CentraHub instance: Leads, Accounts, Contacts, Deals, Tasks, Activities, and Custom Fields. We supplement with direct database reads where the Centra Hosted edition permits access. We verify the customer's account branding (CentraHub vs Focus Softnet) and adjust our runbook accordingly. The discovery output is a written data inventory: record counts per object, custom field schema per module, workflow definition JSON, tag taxonomy, and any known attachment URLs from active Dropbox or Box connectors.

  2. Odoo schema setup and pipeline configuration

    We provision the Odoo CRM schema before any data moves. This includes creating custom fields on res.partner and crm.lead to match the CentraHub custom field schema, creating crm.team records (one per CentraHub pipeline), creating crm.stage records within each team with sequence and probability values mapped from CentraHub stage settings, and adding a centrahub_id__c custom field on res.partner and crm.lead for cross-system record tracing. We configure the Odoo database in a staging environment first for validation before production setup.

  3. Relationship resolution and parent-record migration

    We resolve record dependencies in the correct order: CentraHub Accounts first (to res.partner with is_company=True, capturing the new Odoo partner ID mapped to the original CentraHub account ID), then Contacts (to res.partner with is_company=False, with parent_id pointing to the Odoo partner from the Account), then Leads (to crm.lead type=lead), then Deals (to crm.lead type=opportunity with team_id and stage_id resolved from the pipeline configuration). Each phase emits a reconciliation count comparing exported CentraHub record totals against inserted Odoo record totals.

  4. Activity migration via XMLRPC with parent resolution

    We extract all CentraHub activity records (calls, emails, notes, appointments), resolve each record's parent Odoo ID and model from the CentraHub ID mapping built in phase 3, and insert mail.message records in chronological order via Odoo XMLRPC. Calls insert with message_type=phonecall, emails with message_type=email, and notes with message_type=comment. We flag any activity with a parent ID not found in the Odoo database (orphaned activities) and deliver a separate orphan activity report for the customer's admin to review.

  5. Tag, attachment, and campaign inventory migration

    We migrate tags via crm.tag creation and application, mapping tag values to the Odoo tag taxonomy with a value map for any non-matching tags. We download accessible attachment files from Dropbox or Box (where connectors are active), map them to Odoo ir.attachment records via XMLRPC, and re-attach to the correct parent record. Email campaigns are not migrated as active state; we deliver a written campaign inventory document listing every CentraHub campaign, its audience segment criteria, send history, and open/click data for the admin to rebuild in Odoo Email Marketing.

  6. Cutover, delta sync, and workflow handoff

    We freeze CentraHub writes during the cutover window, run a delta migration of any records modified or created during the migration period, then confirm Odoo as the system of record. We deliver the CentraHub Workflow JSON inventory and a recommended Odoo Automated Action mapping for each workflow trigger type. We support a one-week hypercare window for reconciliation issues raised by the customer's team. We do not rebuild CentraHub workflows as Odoo Automated Actions inside the standard migration scope; that work is documented for the customer's admin or an Odoo partner.

Platform deep dives

Context on both ends of the pair

CentraHub CRM logo

CentraHub CRM

Source

Strengths

  • Unlimited record storage on all paid tiers — no per-contact billing shock as records grow.
  • All-in-one sales, marketing, and service modules with a single vendor and unified data model.
  • Per-user pricing is competitive against HubSpot and Salesforce for teams between 5 and 50 seats.
  • Industry-specific editions provide vertical templates for Real Estate, Automotive, and Education use cases.
  • Custom field support per module allows teams to tailor the schema without developer involvement.

Weaknesses

  • Minimum 5-user seat requirement excludes solo users and very small teams regardless of plan tier.
  • No publicly documented API endpoint reference — programmatic exports are undocumented and unsupported.
  • Initial onboarding and setup support receive consistent criticism from early-stage reviewers.
  • Brand pivot to Focus Softnet creates uncertainty about product roadmap and long-term support continuity.
  • Sparse English-language community presence makes peer troubleshooting difficult outside of Indian user networks.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across CentraHub CRM and Odoo CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    CentraHub CRM: Not publicly documented.

  • Data volume sensitivity

    B

    CentraHub CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your CentraHub CRM to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about CentraHub CRM to Odoo CRM data migrations

Answers to the questions buyers ask most during CentraHub CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your CentraHub CRM to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Straightforward migrations under 20,000 total records with no custom objects and a single CentraHub pipeline complete in four to six weeks. Migrations with complex custom field schemas, multiple CentraHub pipelines requiring separate Odoo CRM team configuration, large activity histories (over 200,000 records), or active Dropbox and Box attachments move to eight to twelve weeks because of the CSV parsing, relationship reconstruction, and pipeline setup work. The absence of a CentraHub API extends the timeline compared to migrations from platforms with REST endpoints.

Adjacent paths

Related migrations to explore

Ready when you are

Move from CentraHub CRM.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day