CRM migration

Migrate from Omni.us to Odoo CRM

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

Omni.us logo

Omni.us

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

50%

6 of 12

objects map 1:1 between Omni.us and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Omni.us to Odoo CRM is a structural migration from a script-based sequence tool to a full-stack CRM and ERP platform. Omni.us has no native Contacts object—responses and script associations are the only proxy—so we must reconstruct the contact layer by tracing response-to-account relationships before any contact records can be written to Odoo. Scripts, which are the core object in Omni, have no direct Odoo equivalent; we migrate their content as description fields on crm.lead records and flag them for manual reassignment in Odoo's Activity and Workflow system. Automatic Pausing rules do not migrate as automation code; we document them as a written specification for the customer's Odoo admin to rebuild as mail.activity records or ir.actions.server rules. The migration uses Odoo's XML-RPC or JSON-RPC API with batch chunking and rate-limit handling to stay within the target instance's write limits, which vary by hosting provider and edition.

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

Omni.us logo

Omni.us

What's pushing teams away

  • The platform's narrow feature set—Scripts and Responses—becomes limiting as teams grow and need deeper CRM capabilities beyond sequence management.
  • Limited integrations with popular CRM platforms creates data silos that frustrate teams expecting bidirectional sync with tools already in their stack.
  • Single-tier pricing at $49/month offers no room to scale seat counts or feature access for growing teams without switching platforms entirely.
  • Absence of a free trial or freemium tier forces a commitment decision before teams can validate fit with their specific outreach workflows.

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 Omni.us objects map to Odoo CRM

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

Omni.us

Target Accounts

maps to

Odoo CRM

res.partner (company mode)

1:1
Fully supported

Omni Target Accounts map to Odoo res.partner records in company mode. We preserve company name, domain (stored as website), and any custom workbook fields as ir.model.data fields on the partner. Odoo's res.partner model serves as both Contact and Account depending on the is_company flag, so Target Accounts set is_company=True. Address enrichment (street, city, country) is attempted from domain-based lookups where available; missing fields are flagged in the reconciliation report.

Omni.us

Contacts (reconstructed)

maps to

Odoo CRM

res.partner (contact mode)

1:many
Fully supported

Omni has no native Contacts object, so we reconstruct the contact layer by extracting respondent email addresses and names from Response records and associating them with the parent Target Account partner. Multiple responses from the same email address deduplicate to a single res.partner contact record. The original Omni Script association is preserved in a custom field script_reference__c for audit. Contacts without an associated Target Account are created as standalone partner records flagged as orphan=True in a custom field.

Omni.us

Scripts

maps to

Odoo CRM

crm.lead.description (template content)

1:1
Fully supported

Omni Scripts are outreach templates with placeholders and branching logic that has no direct Odoo equivalent. We extract the full script text, placeholders, and step sequence and write them as a custom Text field script_template__c on crm.lead. The customer's Odoo admin assigns script content to new leads or uses it as a manual reference in follow-up activities. Script step sequencing and branching are not converted to automation; we document the structure in a written script inventory so the admin can rebuild it as a mail.activity plan or stage-based template if needed.

Omni.us

Case Studies

maps to

Odoo CRM

ir.attachment

1:1
Mapping required

Omni Case Studies are content attachments linked to accounts or scripts. We export the text content, title, and metadata and write them as Odoo ir.attachment records linked to the corresponding res.partner via res_model='res.partner' and res_id pointing to the Target Account partner. Odoo does not have a native Case Study object, so the generic attachment model is the correct equivalent. PDF or document attachments are stored as binary attachments with the original filename preserved.

Omni.us

Responses

maps to

Odoo CRM

mail.message

1:1
Mapping required

Omni Responses represent reply data tied to scripts and accounts. We map each Response to an Odoo mail.message record attached to the parent crm.lead (if the respondent was linked to a lead) or to the res.partner contact record. Response text, timestamp, and disposition status migrate. If the destination Odoo instance includes the Discuss (mail) module, messages appear in the chatter on the partner or lead record. Response records without a resolvable parent contact are attached to the corresponding Target Account partner and flagged as unmatched_response=True.

Omni.us

Automatic Pausing Rules

maps to

Odoo CRM

mail.activity.plan

lossy
Mapping required

Omni Automatic Pausing rules govern when outreach sequences pause based on prospect actions (reply, bounce, opt-out). These are not automation code and do not migrate as Odoo server actions. We audit every active Automatic Pausing rule, document its trigger condition, action type, and target script, and deliver a written specification recommending equivalent Odoo mail.activity.plan entries and ir.actions.server rules. The customer's Odoo admin implements the recommended rules post-migration; we do not write automation code as part of the standard migration scope.

Omni.us

Custom Workbook Fields

maps to

Odoo CRM

ir.model.field

lossy
Mapping required

Omni's workbook-layer custom fields require schema discovery via the model IDE before migration. We enumerate all active custom field definitions (name, type, workbook scope) and create equivalent ir.model.field records in Odoo on the target model (res.partner or crm.lead). Duration fields, calculated fields, and nested custom properties are mapped to Odoo field types (Float, Integer, Char, Text, Selection) based on type analysis. Fields that cannot map directly (e.g., Omni Duration with branching logic) are documented in the field mapping appendix with a manual resolution recommendation.

Omni.us

Users

maps to

Odoo CRM

res.users

1:1
Fully supported

Omni user records map to Odoo res.users. We resolve by email match against the destination Odoo instance. Any Omni user without a matching Odoo res.users record is placed in a reconciliation queue for the customer's admin to provision before record import resumes. Role and permission structures in Omni are limited, so we create baseline User records without granular access control preservation and flag this gap in the handoff documentation.

Omni.us

Pipeline / Deal Stages

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Omni has no native pipeline or deal stages. We create a default Odoo CRM pipeline with stages New, Qualified, Proposition, Won, and Lost, which are the Odoo CRM default stages. If the customer used Omni script status as a de facto pipeline proxy (e.g., Active, Paused, Completed, Cancelled), we map those statuses to crm.stage entries with matching sequence order and name. Lost reason configuration (lost_reason_id) is enabled on the stage form for post-migration rep entry.

Omni.us

Engagement Timestamps

maps to

Odoo CRM

mail.tracking.value

1:1
Fully supported

Omni records timestamps for script sends, response receipts, and pausing events. We migrate these as mail.message records with a tracking field timestamp referencing the original Omni UTC timestamp. This preserves the activity timeline ordering in Odoo's chatter even though the engagement type is not a native Odoo activity. Historical timestamps are preserved to the second where available from the Omni API response payload.

Omni.us

Tags

maps to

Odoo CRM

res.partner.category

lossy
Fully supported

Omni Target Account tags (e.g., Industry, Tier, Segment labels) map to Odoo res.partner.category records (the Tags model on partners). We extract distinct tag values from the source workbook, create matching res.partner.category entries, and assign them to the corresponding res.partner records during import. Tag rename or consolidation (e.g., two tags meaning the same thing) happens during the pre-migration data-cleanse phase.

Omni.us

Sequence Step Metadata

maps to

Odoo CRM

crm.lead.optional

lossy
Fully supported

Omni script steps carry metadata such as step order, delay between steps, channel (email/LinkedIn), and conditional branches. We extract this as a JSON blob stored in a custom Text field script_steps__c on crm.lead, preserving the full step metadata as a reference document. This is not rendered as Odoo activities or automation; it is a data-preservation pass so that the customer has the original sequencing information available for manual workflow reconstruction.

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.

Omni.us logo

Omni.us gotchas

Medium

60 req/min API rate limit slows bulk migration

High

No dedicated Contacts object means contact layer must be reconstructed

Medium

Custom workbook field types require manual mapping configuration

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 Contacts object means the contact layer must be reconstructed

    Omni does not store contacts as standalone objects—only responses tied to scripts and accounts exist as the contact proxy. When migrating to Odoo CRM, we must trace each Response's respondent email address back to a Target Account partner or create a standalone contact record. This means every Response record is inspected, deduplicated by email, and associated with a res.partner contact record. Contacts that appear only in older or archived scripts with no recent response activity may be missed entirely; we run a reconciliation pass post-migration to surface gaps and deliver a written list of contacts that could not be linked.

  • Scripts are content, not automation—they do not map to Odoo workflows

    Omni Scripts are outreach templates with placeholders and step sequencing. Odoo has no native script or sequence-template object. We extract script content as text fields on crm.lead records, which preserves the data but not the execution logic. Automatic Pausing rules and any step-delay logic must be rebuilt as Odoo mail.activity plans or ir.actions.server rules by the customer's admin after migration. We document every script's structure and pausing rules in a written inventory but do not write automation code as part of the standard migration scope.

  • Omni API rate limit of 60 req/min requires batching and backoff

    Omni's API enforces a hard 60 requests per minute limit per API key. For migrations with thousands of scripts, accounts, and responses, we implement exponential backoff retry logic and distribute reads across the available API key quota. Datasets exceeding 50,000 records extend migration timelines proportionally—we flag this during scoping so the customer sets realistic cutover expectations. Write operations to Odoo use XML-RPC or JSON-RPC at whatever rate the target Odoo instance accepts, which varies by hosting provider and instance tier.

  • Custom workbook field types require pre-migration schema discovery

    Omni's workbook layer supports custom fields that can exist at schema, shared, or workbook scope. Duration fields, calculated fields, and nested custom properties are not immediately visible in the standard API response. We perform a pre-migration field audit against the Omni model IDE to enumerate all active custom fields and their data types before writing any records to Odoo. Any fields that cannot map directly to Odoo field types are flagged in the field mapping appendix with a manual resolution recommendation.

  • Odoo pricing and hosting varies by provider, which affects the destination setup

    Odoo is available as Odoo Online (SaaS, per-user per-app subscription), Odoo.sh (cloud hosting with CI/CD), or self-hosted Community Edition (free but requires server management). Migration scope differs depending on the destination variant: Odoo Online has a managed upgrade path, Odoo.sh allows custom module deployment, and Community Edition requires manual version management. We confirm the destination variant during scoping and adjust the migration approach for API access method, custom module deployment rights, and post-migration version management expectations.

Migration approach

Six steps for a successful Omni.us to Odoo CRM data migration

  1. Discovery and schema design

    We audit the Omni.us workspace across Scripts, Target Accounts, Case Studies, Responses, Automatic Pausing rules, custom workbook fields, and user records. We pair this with a destination Odoo instance review to confirm the installed apps (CRM, Discuss, Project), Odoo edition (Online,.sh, or Community), and any existing custom fields or modules. The discovery output is a written migration scope, an Odoo schema design (partner categories, custom fields, crm.stage configuration), and a contact-reconstruction strategy based on the Response-to-Account linkage ratio.

  2. Pre-migration data audit and contact reconstruction planning

    We run a pre-migration data audit to identify orphaned responses (responses without a resolvable Target Account), duplicate respondent emails across scripts, and custom workbook field definitions at each abstraction level. We build a contact reconstruction plan: each distinct respondent email becomes a res.partner contact record linked to the nearest Target Account, with a script_reference__c field tracking the source Script. Any respondents that cannot be associated with a Target Account are flagged as standalone contacts. Data deduplication rules (email match, name normalization) are agreed upon before extraction begins.

  3. Sandbox migration and reconciliation

    We run a full migration into an Odoo Sandbox environment using production-equivalent data volumes. The customer's Odoo administrator reviews record counts (partners, contacts, crm.lead, attachments, mail.messages), spot-checks 25-50 records against the Omni source, and validates the custom field mapping for workbook-layer fields. Any schema corrections or mapping changes happen in the sandbox before production migration begins. This step prevents rework in the live environment and ensures the customer signs off on the contact reconstruction logic.

  4. User provisioning and owner reconciliation

    We extract every distinct Omni user referenced on Scripts, Target Accounts, and Responses and match by email against the destination Odoo res.users table. Users without a matching Odoo account go to a reconciliation queue for the customer's admin to provision. Migration cannot complete owner resolution until all referenced users have an Odoo res.users record, because the create_uid and write_uid fields on mail.message and crm.lead require valid User IDs.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.partner (company mode, from Target Accounts), res.partner (contact mode, reconstructed contacts), crm.lead (from Scripts and account associations), ir.attachment (Case Studies), mail.message (Responses), ir.model.field (custom workbook field schema), res.partner.category (tags), and mail.tracking.value (engagement timestamps). Each phase emits a row-count reconciliation report before the next phase begins. Script content is written to crm.lead as script_template__c after lead creation.

  6. Cutover, validation, and automation rebuild handoff

    We freeze Omni 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 Script inventory document (with content and step metadata) and the Automatic Pausing Rules specification to the customer's Odoo admin. We support a one-week hypercare window for reconciliation issues raised by the sales team. Workflow and automation rebuilds are outside the standard migration scope; the documentation we deliver enables the admin or an Odoo partner to implement them.

Platform deep dives

Context on both ends of the pair

Omni.us logo

Omni.us

Source

Strengths

  • Simple script-based outreach model with a single flat monthly price of $49.
  • Customer support praised for responsiveness and personalized onboarding assistance.
  • Account-based target list management built natively into the platform workflow.
  • Automatic pausing reduces manual management of outreach sequences.

Weaknesses

  • Narrow feature scope—Scripts and Responses only—forces reliance on external tools for broader CRM needs.
  • No free trial or freemium tier means teams must commit before evaluating fit.
  • Limited public API documentation and thin community ecosystem around integrations.
  • Single pricing tier does not scale with team size or feature needs.
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. All 8 core objects map 1:1 between Omni.us and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Omni.us and Odoo CRM.

  • 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

    Omni.us: 60 requests per minute per API key; can be increased to 500 req/min on request.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Omni.us 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 Omni.us to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 10,000 Target Accounts, 2,000 scripts, and moderate Response volumes with a clean contact reconstruction path. Migrations with high response volumes requiring full contact deduplication (over 50,000 Response records), multiple workbook-layer custom field tiers, or multi-company Odoo configurations extend to six to ten weeks because of the schema discovery phase and the reconciliation pass. Timeline also depends on the customer's Odoo instance availability and admin responsiveness for user provisioning.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Omni.us.
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