CRM migration

Migrate from Oracle CRM On Demand to Odoo CRM

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

Oracle CRM On Demand logo

Oracle CRM On Demand

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Oracle CRM On Demand and Odoo CRM.

Complexity

BStandard

Timeline

4-7 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Oracle CRM On Demand to Odoo CRM is a platform migration that requires handling a legacy enterprise data model against a modular open-source ERP architecture. Oracle CRM On Demand stores Accounts, Contacts, Leads, Opportunities, and Activities in a flat relationship model, while Odoo CRM represents these as res.partner ( Contacts and Companies unified), crm.lead (Leads and Opportunities unified via pipeline stages), and mail.activity (Tasks, Calls, Meetings) with attachments stored in ir.attachment. The Oracle 30 req/min REST API rate limit demands careful batch sequencing, and the 168-hour export file retention window means we download immediately upon job completion. We resolve owner mapping via email lookup, handle custom object schema extraction from Oracle before Odoo model creation, and preserve Opportunity-to-Account and Contact-to-Account lookups through ID resolution at migration time. Workflow Rules, Assignment Rules, and Oracle's Migration Tool do not migrate; we deliver a written inventory of automation logic for Odoo Studio and server-action rebuild. Odoo's Community edition is free for core CRM; Enterprise adds Studio, a mobile app, and multi-company support, which determines the final migration destination tier.

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

Oracle CRM On Demand logo

Oracle CRM On Demand

What's pushing teams away

  • The user interface is widely described as dated and non-intuitive, driving low user adoption and requiring significant training investment.
  • Oracle has effectively deprecated the product in favor of Oracle CX and Sales Cloud, raising long-term support and development concerns.
  • High total cost of ownership including licensing, implementation consulting, and ongoing administration strains budget for mid-market teams.
  • Integration with non-Oracle third-party applications is limited and requires custom development, limiting ecosystem flexibility.
  • Performance degrades with poor internet connectivity since it is a browser-based SaaS application with no offline capability.

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 Oracle CRM On Demand objects map to Odoo CRM

Each row shows how a Oracle CRM On Demand 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.

Oracle CRM On Demand

Account

maps to

Odoo CRM

res.partner (Company role)

1:1
Fully supported

Oracle Accounts map to Odoo res.partner records with partner_type set to 'contact' = False and is_company = True. Oracle Account Name becomes res.partner name; Oracle address fields map to street, street2, city, state_id, zip, and country_id. Oracle Account Owner (user) maps to create_uid via email lookup. We resolve the Oracle Account row ID to the Odoo res.partner ID before importing any Contact records that reference it.

Oracle CRM On Demand

Contact

maps to

Odoo CRM

res.partner (Contact role)

1:1
Fully supported

Oracle Contacts map to Odoo res.partner records with partner_type set to 'contact' = True and is_company = False. Oracle Contact Name, Email, Phone, Mobile, Job Title, and Department map to the corresponding res.partner fields. The parent_id lookup references the res.partner Account record resolved in the Account migration phase. We deduplicate by email using a pre-import dedup check and flag duplicates for customer review before insert.

Oracle CRM On Demand

Lead (Standard tier)

maps to

Odoo CRM

crm.lead (Lead stage)

1:1
Fully supported

Oracle Leads (Standard CRM On Demand tier) map to Odoo crm.lead records with type = 'lead'. Oracle Lead_Status maps to crm.lead stage_id; Oracle Lead_Source maps to crm.lead source_id; Oracle Rating maps to crm.lead priority. Custom lead fields migrate as char, text, or selection fields on the crm.lead model. Note that the Enterprise Lead Referral tier allows create-only access via the API with no edit, convert, or analytics, which restricts what lead history can be extracted; we flag this during discovery and scope accordingly.

Oracle CRM On Demand

Opportunity

maps to

Odoo CRM

crm.lead (Opportunity stage)

1:1
Fully supported

Oracle Opportunities map to Odoo crm.lead records with type = 'opportunity'. Oracle Opportunity Name becomes crm.lead name; Oracle Revenue and Probability map to expected_revenue and probability; Oracle Close Date maps to date_deadline; Oracle Account maps via the Account lookup resolved in the Account migration phase. The pipeline stage from Oracle maps to the corresponding Odoo crm.stage ID, which we configure as a custom pipeline before migration.

Oracle CRM On Demand

Pipeline Stages (Opportunity Stage)

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Each Oracle Opportunity Stage becomes an Odoo crm.stage record within the CRM pipeline. We create the stages in Oracle stage order with the same probability percentages from Oracle (rounded to integer). Odoo's Kanban stage ordering is set by the sequence field. If Oracle has closed won and closed lost stages, we map them to Odoo's corresponding lost_closed and won stage states.

Oracle CRM On Demand

Task

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Oracle Tasks map to Odoo mail.activity records with activity_type_id set to the Odoo standard 'To Do' activity type. Oracle Task Subject becomes mail.activity summary; Oracle Status maps to mail.activity functional state (done vs open); Oracle Due Date maps to mail.activity date_deadline. The res_model and res_id on the activity record reference the migrated crm.lead or res.partner record.

Oracle CRM On Demand

Call

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Oracle Call records map to Odoo mail.activity with activity_type_id set to the Odoo 'Call' activity type. Call Duration from Oracle maps to a custom integer field crm_call_duration_seconds on the activity. Call Subject becomes activity summary; Call Date becomes date_deadline or activity_date_deadline. We store Oracle call disposition in a custom activity field for audit.

Oracle CRM On Demand

Appointment

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Oracle Appointments map to Odoo calendar.event records. Oracle Appointment Subject becomes calendar.event name; Oracle Start Date/Time and End Date/Time map to start and stop on the event; Oracle Location maps to location. Attendees map to calendar.attendee records linked by email to the migrated res.partner or crm.lead. Recurring appointments in Oracle require Odoo calendar recurrence configuration to replicate.

Oracle CRM On Demand

User/Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Oracle Named Users referenced as Owner on any record map to Odoo res.users by email address match. We extract every distinct Oracle Owner from Account, Contact, Opportunity, and Activity records during discovery, produce a user mapping table, and reconcile against the destination Odoo res.users table. Any Oracle Owner without a matching Odoo user goes to a provisioning queue for the customer's Odoo admin to create before record migration proceeds.

Oracle CRM On Demand

Custom Object

maps to

Odoo CRM

ir.model.model (custom crm model)

1:1
Fully supported

Oracle custom objects have tenant-specific schemas accessible via the Oracle Web Services API. We reverse-engineer each custom object's field definitions (field name, type, required, picklist values) from the Oracle API before creating the corresponding Odoo model. The Odoo model is created via ir.model and ir.model.fields with the correct field type (char, text, selection, many2one, one2many) matching the Oracle type. Custom object data migrates after all standard object parent lookups are resolved.

Oracle CRM On Demand

Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Oracle attachments associated with records (stored as URLs pointing to Oracle's document server or as binary blobs) map to Odoo ir.attachment records. We extract attachment content via the Oracle API, store it in our migration workspace, and create ir.attachment records with res_model pointing to the migrated model (crm.lead, res.partner) and res_id pointing to the migrated record ID. Large attachment volumes require separate scoping and may involve file-size limits on the destination Odoo instance.

Oracle CRM On Demand

Note

maps to

Odoo CRM

mail.message

1:1
Fully supported

Oracle Notes migrate as Odoo mail.message records with message_type = 'comment'. The note body becomes mail.message body (HTML). We link each note to the parent record via res_model and res_id. If Oracle notes are associated with multiple records, we create individual mail.message records per link or consolidate under a primary record at the customer's direction.

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.

Oracle CRM On Demand logo

Oracle CRM On Demand gotchas

High

REST API rate limit of 30 req/min is a migration bottleneck

High

List exports expire after 168 hours

Medium

Migration Tool requires identical release versions

Medium

Enterprise Lead Referral tier limits lead functionality

Low

Export field access gated by user role privileges

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

  • Oracle API rate limit of 30 req/min makes large record sets slow to extract

    Oracle CRM On Demand enforces a hard 30 requests per minute per user session on its REST API. The counter resets to zero at the end of each one-minute period, not rolling. For migrations with tens of thousands of Accounts, Contacts, or Opportunities, this creates significant sequencing overhead. We pre-stage data in queue batches, throttle our export clients to honor the 30-req/min ceiling, and use bulk export jobs where Oracle supports them. Migrations without this handling stall on rate limit errors and take multiple days longer than expected.

  • List export files expire after 168 hours (7 days)

    Oracle CRM On Demand list export jobs produce downloadable files available for exactly 168 hours before the system permanently deletes them. If the download is interrupted or the migration window slips, the export job must be re-queued and re-run. We download Oracle export files immediately upon job completion, verify the row count, and store them in our migration workspace. We never rely on Oracle's file retention to bridge gaps between migration phases. This is especially critical for large exports that take multiple download sessions to complete.

  • Oracle and Odoo have fundamentally different data models for Contacts and Companies

    Oracle CRM On Demand uses separate Account and Contact objects with an explicit linking field on Contact pointing to Account. Odoo uses a single res.partner model where a partner record can be a contact (is_company = False) or a company (is_company = True) with contact child records under a parent company. This is not a simple field rename; it requires restructuring the parent-child hierarchy during migration. We handle this by importing company-type partners first, then contact-type partners with parent_id resolved to the migrated Account, ensuring the relationship is satisfied at insert time.

  • Lead and Opportunity are separate objects in Oracle but unified in Odoo

    Oracle CRM On Demand maintains Leads and Opportunities as distinct objects with no automatic conversion mechanism. Odoo CRM uses crm.lead with a type field ('lead' vs 'opportunity') to represent both states within the same model, and a Convert to Opportunity action that changes the type. We import Oracle Leads as crm.lead type='lead' and Oracle Opportunities as crm.lead type='opportunity', preserving the Oracle stage-to-Odoo stage mapping for both paths. The customer decides whether Oracle Leads that should convert are imported as Leads first or converted during import.

  • Enterprise Lead Referral tier restricts API access to leads only

    Oracle CRM On Demand Enterprise Lead Referral service tier allows users to create Leads only, with no ability to edit, convert, or run analytics on existing Lead records via the API. Organizations on this tier may have historical lead data that is not fully accessible for export. We flag this during discovery scoping, attempt API extraction, and adjust the migration scope if lead history is incomplete. Data that cannot be extracted via the API may require manual export or an alternative data extraction method discussed with the customer.

Migration approach

Six steps for a successful Oracle CRM On Demand to Odoo CRM data migration

  1. Discovery and data audit

    We audit the Oracle CRM On Demand tenant across active modules (Standard vs Enterprise Lead Referral), API user privileges (ensuring the export account has List-Export-All-Fields privilege), record counts for Accounts, Contacts, Leads, Opportunities, Activities, and custom objects, and existing Oracle custom object schema definitions. We extract a full object list via the Oracle Web Services API to reverse-engineer the custom object field map before designing the Odoo destination. The discovery output is a written migration scope document covering record volumes, custom object count, and any Oracle tier restrictions affecting data accessibility.

  2. Destination schema design and Odoo model creation

    We design the Odoo CRM destination schema: crm.lead stages (pipeline stages matching Oracle opportunity stages), res.partner fields, custom ir.model entries for each Oracle custom object, and Odoo user accounts for every Oracle Named User that appears as Owner. We create all custom models via Odoo's ir.model and ir.model.fields before any data import so that parent lookup references are satisfied at insert time. Schema changes are validated in an Odoo staging database before production deployment.

  3. API extraction with rate-limit handling and file retention

    We extract data from Oracle CRM On Demand using the REST API with client-side throttling to honor the 30 req/min limit. Large record sets are queued in batches; we wait for the one-minute window reset before resuming. We trigger Oracle list exports for bulk data, download files immediately upon job completion (within the 168-hour window), and store them in our migration workspace. Export is always run under an administrator account with the List-Export-All-Fields privilege to avoid role-gated field restrictions.

  4. Owner and account mapping with reconciliation

    We extract every distinct Oracle Owner from Account, Contact, Opportunity, and Activity records and match by email address against the destination Odoo res.users table. Any Oracle Owner without a matching Odoo user is placed in a reconciliation queue for the customer's Odoo admin to provision before record import resumes. Oracle Accounts are mapped to res.partner (company) records first so that Contact imports can resolve the parent_id reference at insert time.

  5. Production migration in dependency order

    We run production migration in strict dependency order: res.users (provisioned), res.partner as companies (from Oracle Accounts), res.partner as contacts (from Oracle Contacts with parent_id resolved), crm.lead as leads (from Oracle Leads), crm.lead as opportunities (from Oracle Opportunities with partner_id resolved), calendar.event (from Oracle Appointments), mail.activity (from Oracle Tasks and Calls), mail.message (from Oracle Notes), custom model records (last, with all lookups satisfied), and ir.attachment (attachments linked by res_model and res_id). Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, delta sync, and workflow handoff

    We freeze Oracle CRM On Demand writes during cutover, run a delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver a written inventory of Oracle Workflow Rules and Assignment Rules with their trigger events, conditions, and actions documented for Odoo Studio server-action rebuild. We do not rebuild Oracle workflows as Odoo automations inside the migration scope; that work is a separate engagement. We support a one-week post-cutover hypercare window for reconciliation issues.

Platform deep dives

Context on both ends of the pair

Oracle CRM On Demand logo

Oracle CRM On Demand

Source

Strengths

  • Mature product with deep Oracle ecosystem integration for organizations already running Oracle database or ERP.
  • Enterprise-grade compliance certifications and data security controls suitable for regulated industries.
  • Highly customizable object model with support for custom fields, layouts, and page-level configuration.
  • Strong reporting and analytics capabilities with pre-built sales metrics and ad-hoc report builder.
  • Robust role-based access control with fine-grained field-level security settings.

Weaknesses

  • Dated web interface with poor usability compared to modern CRM alternatives, cited frequently in negative reviews.
  • Active product sunset: Oracle's official migration service and roadmap prioritize Sales Cloud, not CRM On Demand development.
  • Expensive licensing with opaque pricing; total cost of ownership is prohibitive for small and mid-market organizations.
  • Limited third-party integrations outside the Oracle ecosystem require custom development to connect modern tools.
  • Steep learning curve for administrators and end users, driving high training costs and slow adoption.
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. 3 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 Oracle CRM On Demand and Odoo CRM.

  • Object compatibility

    B

    3 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

    Oracle CRM On Demand: 30 requests per minute per user session, counter resets at the end of each 1-minute period (not rolling).

  • Data volume sensitivity

    B

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

Estimator

Estimate your Oracle CRM On Demand 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 Oracle CRM On Demand to Odoo CRM data migrations

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

Can't find your answer?

Walk through your Oracle CRM On Demand 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 four and seven weeks for accounts under 30,000 Contacts, 10,000 Opportunities, and no custom objects. Migrations with Oracle custom objects, large activity histories (over 200,000 activity records), Lead Referral tier restrictions, or a phased Odoo rollout (CRM first, then ERP modules) move to ten to sixteen weeks. The Oracle 30 req/min API rate limit is the primary variable: small record sets extract quickly; large record sets require batch sequencing that adds days to the extraction phase.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Oracle CRM On Demand.
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