CRM migration

Migrate from Unim to Odoo CRM

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

Unim logo

Unim

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Unim and Odoo CRM.

Complexity

CModerate

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Unim to Odoo CRM means exiting a platform where every deployment is hand-built with a unique field landscape, and entering Odoo CRM's module-based architecture where res.partner handles contacts and companies, crm.lead manages prospects, and crm.opportunity drives the sales pipeline. We begin every Unim migration by introspecting the live schema via the custom-fields API, resolving ModelID and DataType references, and cataloguing every custom field before writing a single record. Odoo CRM's standard objects accept these records in dependency order: country and state records first, then res.partner, then crm.lead, then crm.opportunity with stage and user lookups resolved. Unim workflows, automations, and bespoke application logic do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or via custom module development.

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

Unim logo

Unim

What's pushing teams away

  • Pricing is not disclosed publicly — every prospect must go through a custom-proposal conversation, making procurement comparisons slow and opaque.
  • Custom-development positioning means support, feature roadmap, and upgrade paths depend heavily on the vendor's capacity rather than a versioned product release cadence.
  • Small public review footprint and limited independent reviewer feedback make vendor due diligence hard for buyers.
  • No published API documentation; integration capability beyond the documented modules requires vendor-side custom build, creating ongoing dependency.
  • Broad horizontal positioning (CRM + accounting + HR + projects) means vertical depth in any single module is shallower than dedicated best-of-breed alternatives.

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 Unim objects map to Odoo CRM

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

Unim

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Unim Contact records map to Odoo CRM res.partner. The customer's name, email, phone, and address fields migrate directly. We resolve the country and state references via ir.model.data lookups so that partner addresses validate correctly. Owner assignment from Unim maps to res.partner.user_id via email-matched res.users. Custom fields on the Contact model migrate as custom fields on res.partner via Odoo Studio or a custom module created before the partner import phase begins.

Unim

Company

maps to

Odoo CRM

res.partner (company type)

1:1
Fully supported

Unim Company records map to Odoo CRM res.partner with is_company=True. The company name becomes partner name, and the domain or website migrates to website. We create res.partner records for companies before the Contact import phase so that individual Contact records can reference a parent partner_id for the company association. This satisfies Odoo CRM's hierarchical partner model and enables the Contact-to-Company linkage that drives the pipeline view.

Unim

Activity

maps to

Odoo CRM

mail.message

1:1
Fully supported

Unim Activity records—calls, emails, notes, meetings—map to Odoo CRM mail.message entries linked to the target res.partner record via res_id and model=res.partner. Activity type, body content, timestamp, and owner reference migrate directly. We set message_type appropriately (email, call, note) and preserve the original timestamp so that the Odoo CRM chatter timeline reflects the true engagement chronology. Odoo CRM's mail.message does not require a separate Activity model; all interactions flow through the chatter thread on res.partner.

Unim

Custom Field (Unim)

maps to

Odoo CRM

Custom Field (Odoo CRM)

lossy
Fully supported

Unim exposes custom fields via a dedicated custom-fields API route. Each custom field has a Name, ModelID, DataType, and Nullable flag. DataTypes require a separate valuelists API call to resolve the reference ID before field creation. We introspect all custom fields during discovery, resolve their DataType IDs, and create matching fields in Odoo CRM via Studio (for simple types) or a custom module (for relational types). Field creation in Odoo must complete before the corresponding data import phase runs, so custom field definitions deploy first in every migration plan.

Unim

Custom Object

maps to

Odoo CRM

Custom Model (ir.model)

1:1
Fully supported

Bespoke entity types beyond standard Contacts, Companies, and Activities are defined at the application level in Unim and vary per deployment. We discover these via schema introspection during the discovery phase and create matching custom models in Odoo CRM by adding records to ir.model and ir.model.fields via XML-RPC. Each custom model's API name uses the Odoo naming convention (x_customentity), and lookup relationships to res.partner or crm.lead are established as relational fields. Admin configuration of the custom model's menu and view access is outside migration scope and is documented for the customer's Odoo admin post-migration.

Unim

User/Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Owner assignment on Unim records uses user-reference fields scoped to that specific Unim deployment. Owner IDs cannot be used directly in Odoo CRM. We extract every distinct owner ID referenced on contacts, companies, activities, and custom objects, then match by email address against the Odoo CRM res.users table. Any owner without a matching Odoo user goes into a reconciliation queue for the customer's admin to provision the corresponding user account before the record import phases run. Owner resolution must complete before any res.partner or crm.lead import because user_id is a required lookup on most CRM objects.

Unim

File/Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Unim attachments are served via the Files dimension, not inline with the record. Each attachment requires a separate API call to fetch the binary blob. For large migrations with many attachments, we paginate file extraction and apply retry logic on 429 responses. In Odoo CRM, attachments migrate to ir.attachment records linked via res_model=res.partner and res_id pointing to the target partner. Original filenames and MIME types are preserved. This mapping requires the res.partner import phase to complete before file association, so attachments run as the final phase after the record graph is stable.

Unim

Tag/Label

maps to

Odoo CRM

res.partner.category

lossy
Fully supported

Unim tag associations are stored as array fields or linked records depending on the specific deployment. We preserve tag-to-record linkages as a join table that maps to Odoo CRM res.partner.category records. The category.name migrates as the tag label. If the customer's Unim instance uses a large taxonomy of custom tags, we deduplicate and normalize before import to avoid Odoo CRM's tag explosion on the partner form. The customer chooses during scoping whether to migrate all historical tags or restrict to active-tagged records.

Unim

Pipeline/Deal Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

If the Unim deployment includes deal or opportunity entities, their stage values map to Odoo CRM crm.stage records. We create stage records in sequence order, set is_won and sequence fields to match the Unim stage properties, and configure fold=False for active stages so they appear in the Odoo CRM pipeline kanban view. The crm.stage configuration deploys before any crm.lead or crm.opportunity import so that stage lookups resolve at insert time.

Unim

Lead/Prospect

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Unim entities serving as sales prospects (leads) map to Odoo CRM crm.lead. The lead's name, email, phone, source, and description migrate directly. The stage field maps to crm.stage via the stage configuration phase. Priority and tag_ids migrate to crm.lead priority and category_ids respectively. Owner assignment uses the resolved res.users lookup. In Odoo CRM, crm.lead serves as the initial pipeline entry; conversion to res.partner (for new contacts) and crm.opportunity (for pipeline tracking) happens post-migration in the Odoo CRM UI or via the crm.lead convert wizard.

Unim

Opportunity

maps to

Odoo CRM

crm.opportunity

1:1
Fully supported

Unim opportunity records map to Odoo CRM crm.opportunity. The opportunity name, expected revenue, priority, probability, and partner_id (linked company) migrate directly. Stage maps to crm.stage via the stage configuration. Date_deadline migrates to crm.lead date_deadline. The user_id maps to res.users via the owner reconciliation phase. Odoo CRM's crm.opportunity kanban view and forecasting features become the primary pipeline management interface post-migration.

Unim

Webhook

maps to

Odoo CRM

Webhook (documented only)

1:1
Fully supported

Webhook configurations in Unim are environment-level settings tied to that deployment's API and event model. They cannot be meaningfully exported and re-imported into Odoo CRM's webhook system, which uses different event types and payload schemas. We document active webhooks in the Unim instance as a written inventory for the customer's awareness and include Odoo CRM's webhooks documentation as a reference for the admin to rebuild post-migration.

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.

Unim logo

Unim gotchas

High

Every Unim instance has a unique custom field schema

Medium

Custom field datatypes require a separate lookup call

High

No public API documentation for the core business objects

Medium

File attachment extraction requires a separate Files API call

Medium

Owner/user IDs are instance-scoped and not portable

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

  • Unim schema discovery is mandatory before any data moves

    Unim applications are built per-customer with no shared schema across tenants. Every migration requires a live schema introspection phase against the Unim custom-fields API to enumerate ModelID references, DataType IDs, and active custom field definitions. Skipping this step results in silently dropped custom fields on every record imported into Odoo CRM. We treat schema discovery as the first-class first step in every Unim migration plan and allocate one to two weeks for discovery on complex deployments before writing a single record.

  • Custom field datatypes require a separate valuelists API call

    Unim custom fields reference DataType and Model IDs that must be resolved before Odoo CRM field creation. The valuelists endpoint returns the lookup table for DataType, and the entity definitions return the ModelID. Without this resolution, Odoo CRM custom field creation fails or creates fields with incorrect types. We fetch these dependencies during discovery, convert Unim datatypes to Odoo field types (char, integer, float, boolean, selection, many2one, text), and create the fields via Studio or custom module before any data import phase runs.

  • File attachment extraction requires per-file API calls with pagination

    Unim attachments are served via the Files dimension, not inline with the record, requiring a separate API call per attachment. For large Unim deployments with thousands of attachments, this creates a pagination and retry burden. We paginate file extraction using the Unim API's cursor-based pagination, apply exponential backoff on 429 responses, and batch file re-association in Odoo CRM after the res.partner import phase completes. If rate limits are hit mid-extraction, attachments for those records are held in a retry queue and re-attempted before cutover.

  • Owner IDs are instance-scoped and require email-based reconciliation

    User IDs assigned as record owners in Unim are scoped to that specific deployment and have no meaning in Odoo CRM's res.users table. We extract every distinct owner reference across contacts, companies, activities, and custom objects, then match by email address against the destination res.users. Any Unim owner without a matching Odoo user is flagged in a reconciliation report for the customer's admin to provision before record import resumes. If owners remain unresolved, contacts and companies migrate without a user_id assignment, which blocks Odoo CRM's assignment-based workflow rules.

  • Odoo CRM requires country and state data pre-loaded for address validation

    Odoo CRM's res.partner model enforces address validation against the ir.model.data country and state records. If the customer's Unim data includes address fields with country or state values that do not have corresponding ir.model.data records in the destination Odoo instance, the import rejects those partner records. We pre-load the res.country and res.country.state data via Odoo XML-RPC before any partner import phase begins, ensuring all address lookups resolve correctly.

Migration approach

Six steps for a successful Unim to Odoo CRM data migration

  1. Schema discovery and datatype resolution

    We introspect the live Unim deployment via the custom-fields API endpoint, enumerating every custom field, ModelID, DataType ID, and nullable flag. For each custom field, we call the valuelists endpoint to resolve the DataType reference. We also discover any bespoke entity types beyond the standard Contacts, Companies, and Activities triad. The discovery output is a written schema catalog and a migration map specifying which Unim custom fields map to Odoo CRM standard fields (name, email, phone, website) versus custom fields requiring Odoo Studio or custom module creation before data migration begins.

  2. Object mapping and Odoo CRM schema preparation

    We map Unim objects to Odoo CRM standard models: Contact and Company to res.partner (with is_company distinguished), Activities to mail.message, Prospects to crm.lead, and Opportunities to crm.opportunity. Custom fields discovered in Phase 1 are created in Odoo CRM via Studio or a custom module deployed to a staging instance first. We configure crm.stage pipeline values, res.partner.category tag taxonomy, and pre-load country and state data via ir.model.data records so that address fields validate at import time.

  3. Sandbox migration and mapping validation

    We run a full migration into an Odoo CRM staging environment using representative data volume. The customer's admin reviews the migrated records in the Odoo CRM UI, spot-checks field values against the Unim source, and validates that custom fields populated correctly on res.partner, crm.lead, and crm.opportunity records. Any mapping corrections (field type mismatches, missing DataType resolutions, stage name errors) are fixed in the migration tooling and re-validated before the production migration plan is finalized.

  4. Owner reconciliation and user provisioning

    We extract every distinct owner ID referenced across Unim contacts, companies, activities, and custom objects. We match each by email address against the destination Odoo CRM res.users table. Any Unim owner without a matching Odoo user is added to a reconciliation report with the owner's name, email, and record count for the customer's admin to provision the corresponding Odoo user. Migration cannot proceed to the res.partner or crm.lead import phases until owner resolution is complete because user_id is a required lookup on most CRM objects in Odoo CRM.

  5. Production migration in dependency order

    We run the production migration in record-dependency order: country and state data first, then res.partner (companies and contacts with parent_id resolved), then crm.lead (prospects), then crm.opportunity (opportunities with partner_id, stage_id, and user_id resolved). Activity history migrates via mail.message with res_model and res_id pointing to the target res.partner. File attachments run last after the res.partner graph is stable. Custom object entities run after standard objects because they may carry lookups to res.partner or crm.lead. Each phase emits a row-count reconciliation report; the next phase does not start until the previous phase's reconciliation passes.

  6. Cutover, delta migration, and automation handoff

    We freeze write access to the source Unim deployment at cutover, run a final delta migration to capture any records modified during the migration window, and enable Odoo CRM as the system of record. We deliver a written inventory of Unim webhooks and active application-level automations, documenting their trigger, conditions, and actions for the customer's Odoo admin to rebuild in Odoo Studio or via custom Python module. We support a one-week hypercare window to resolve reconciliation issues raised by the customer's team. Workflow rebuild, Studio customization, and admin training are outside standard migration scope and are documented as separate follow-on engagements.

Platform deep dives

Context on both ends of the pair

Unim logo

Unim

Source

Strengths

  • Custom-built per customer rather than configured off the shelf.
  • All-in-one suite covering CRM, sales, projects, accounting, HR, and payroll.
  • Included data migration and unlimited custom-field configuration.
  • Auto-communication module with website-form lead capture.
  • Geo-location tracking and role-based access for mobile and hybrid teams.

Weaknesses

  • Pricing not disclosed — sales-led only.
  • Custom-development model creates ongoing vendor dependency.
  • No published API documentation for self-serve integration.
  • Broad horizontal scope at the cost of vertical depth.
  • Small public review footprint limits independent validation.
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?

Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.

C

Overall complexity

Moderate migration

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

  • Object compatibility

    C

    4 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

    Unim: Not publicly documented — confirmed during integration scoping..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Unim 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 Unim to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Unim migrations land between four and six weeks for deployments under 25,000 total records with straightforward contacts, companies, and activities and no bespoke entity types. Migrations with large custom field sets, multiple bespoke entity types, extensive file attachment libraries, or owner reconciliation challenges move to ten to fourteen weeks because of extended schema discovery, custom model creation in Odoo CRM, and pagination-heavy file extraction from Unim.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Unim.
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