CRM migration

Migrate from Oracle EBS CRM to Odoo CRM

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

Oracle EBS CRM logo

Oracle EBS CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

85%

11 of 13

objects map 1:1 between Oracle EBS CRM and Odoo CRM.

Complexity

BStandard

Timeline

8-12 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Migrating from Oracle EBS CRM to Odoo CRM is a structural migration that requires two fundamentally different extraction and loading patterns. Oracle EBS CRM has no standard REST API for CRM data; we connect directly to the Oracle database with read-only credentials scoped to the relevant CRM schemas and extract parent-child relationships in dependency order. Odoo CRM receives data via XML-RPC, but the external API is only available on Odoo Custom plans — we verify the destination plan during scoping and flag if Standard or One App Free plans are in use because they cannot accept programmatic data loads. The Oracle APPS schema stores CRM data alongside ERP and HR records in a single database instance, so we scope extraction to CRM-relevant base tables and coordinate with the customer's DBA to prevent disruption to non-CRM modules during migration. Oracle Workflows, approval chains, and Oracle Territory definitions have no direct Odoo equivalent; we document them as transformation candidates in a written handoff report. Custom objects and attachments migrate as structured records and binary blobs respectively.

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 EBS CRM logo

Oracle EBS CRM

What's pushing teams away

  • The user interface is widely described as outdated and the learning curve steep — G2 reviewers consistently cite the clunky UI as a day-to-day friction point that modern SaaS CRMs do not replicate.
  • Oracle's roadmap pressure and end-of-support timelines force upgrades or migrations that organizations would not choose on their own merit — Premier Support for 12.1 ended and Extended Support for 12.2 carries escalating costs through 2031.
  • Organizations discovering that mid-market SaaS CRMs now offer comparable core CRM capabilities at a fraction of the total cost (including implementation, licensing, and internal support) decide to migrate away from the heavy EBS footprint.
  • Oracle's aggressive Fusion Cloud upsell creates a sense of vendor lock-in and limited flexibility, prompting organizations to explore alternatives that do not push a managed cloud migration as the only path forward.
  • The upgrade-heavy lifecycle of EBS on-premise requires a quarter or longer per major release cycle — enterprises seeking evergreen cloud releases with no upgrade projects migrate to platforms with continuous delivery models.

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

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

Oracle EBS CRM

Account (ARHZTA base tables)

maps to

Odoo CRM

res.partner (customer_rank = 1)

1:1
Fully supported

Oracle EBS Accounts stored in ARHZTA and exposed through APPS schema map directly to Odoo res.partner records with partner_type set to customer. The Oracle ACCOUNT_NUMBER becomes partner reference, site_address fields map to street/city/country on res.partner, and tax_id maps to vat. Account is extracted first as it is the parent of every Contact and Opportunity in the EBS CRM data model. We scope extraction to ARHZTA base tables and do not touch financial AR tables unless the customer explicitly requires financial migration scope.

Oracle EBS CRM

Contact (HR/AR schemas)

maps to

Odoo CRM

res.partner (customer_rank = 1, parent_id = Account partner)

1:many
Fully supported

Oracle EBS Contacts stored in HR or AR schemas (depending on whether they are employees or external parties) map to Odoo res.partner with parent_id pointing to the Account partner record. First name, last name, email, phone, and title migrate directly. The Oracle CONTACT_POINT table holds multiple contact methods (email, phone, fax) and we map these to res.partner phone and email fields, with additional contact points stored in the Odoo partner_multi_relation module or as custom fields. Relationship links between Contact and Account are preserved via parent_id.

Oracle EBS CRM

Opportunity (CZ schema)

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Oracle EBS Opportunities stored in the CZ (Collaborative Selling) or deprecated ASF schema map to Odoo crm.lead. We identify the correct schema at discovery time and extract stage name, probability, expected close date, and revenue amounts. The crm_lead CREATE via XML-RPC is performed after Account and Contact partners are created so that partner_id and contact_id lookups are satisfied. Oracle CLOSED_LOST and CLOSED_WON status maps to Odoo stage_id values that we configure as a pre-migration step.

Oracle EBS CRM

Sales Activities / Tasks (Interaction Center or Teleservice tables)

maps to

Odoo CRM

crm.phonecall or project.task

1:1
Fully supported

Oracle EBS Activities and tasks are stored across multiple EBS CRM schemas depending on which CRM module is installed — either the deprecated Teleservice tables or the modern Interaction Center tables. We identify the correct schema at discovery, extract the activity type, timestamp, owner, and related Account/Contact references, and map call-type activities to crm.phonecall in Odoo. Generic task-type activities map to project.task if the Odoo project app is installed; otherwise they map to crm.lead internal notes.

Oracle EBS CRM

Custom Objects (user-defined tables in base product schemas)

maps to

Odoo CRM

ir.model.data (custom module)

1:1
Fully supported

Oracle EBS CRM custom objects reside in user-defined tables within base product schemas and often reference FK columns pointing to core tables like RA_CUSTOMERS or OE_HEADERS. We extract the DDL for every custom table during discovery, identify the referencing FK relationships, and create equivalent Odoo model definitions via a custom Odoo module before importing data. The XML-RPC import targets the newly created Odoo model by its external ID. Custom field types (LOBs, dates, numbers) map to Odoo corresponding field types in the custom module.

Oracle EBS CRM

Attachments (BFILE/CLOB in database or file system)

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Attachments in Oracle EBS CRM are stored as LOB data (BFILE or CLOB columns) in the database or on the file system depending on the attachment configuration. We extract them as BASE64-encoded binary blobs, then upload to Odoo as ir.attachment records via XML-RPC with the res_model and res_id pointing to the related parent record (Account partner, Contact partner, or Opportunity crm.lead). File name and MIME type are preserved in ir_attachment name and mimetype fields.

Oracle EBS CRM

Notes / History (FZ_NOTES or application audit trail)

maps to

Odoo CRM

mail.message

1:1
Fully supported

Notes and audit history in Oracle EBS CRM are stored in generic note tables (FZ_NOTES or equivalent) or in the application-level audit trail. We extract them as text blobs with timestamps and owner references and write them to Odoo mail_message records linked to the parent crm.lead or res.partner. The mail.message model is native to Odoo's messaging architecture and renders in the Chatter thread on the relevant record. Author is resolved via the Odoo res_users mapping.

Oracle EBS CRM

Territory (AS_TERRITORIES base tables)

maps to

Odoo CRM

crm.team

lossy
Fully supported

Oracle EBS Territory definitions stored in AS_TERRITORIES base tables with hierarchical org structure map to Odoo crm_team records. We extract the territory hierarchy and assignment rules during discovery and create corresponding crm.team records with member assignments. Odoo crm_team does not support the full hierarchical territory model that Oracle provides, so we flatten the hierarchy to a single crm.team per territory and note the parent-child relationship in the handoff documentation for the customer's Odoo admin to implement via custom code if needed.

Oracle EBS CRM

Forecasts (CZ tables, Collaborative Selling module)

maps to

Odoo CRM

crm.lead (forecast field)

1:1
Fully supported

Oracle EBS Forecasting is implemented through the Collaborative Selling module and stores forecast data in versioned CZ tables with tight coupling to Opportunity and Territory objects. There is no standard migration path for Oracle EBS Forecast records to any cloud CRM including Odoo. We extract forecast snapshots as a structured CSV report with opportunity references, forecast amounts, and version timestamps, and deliver this as a reference document for the customer to manually enter into Odoo's crm.lead expected_revenue field or to use as a baseline for rebuilding a forecast model in Odoo.

Oracle EBS CRM

Users / Employees (FND_USER, FND_RESPONSIBILITY, PER_ALL_ASSIGNMENTS_F)

maps to

Odoo CRM

res.users

1:1
Fully supported

Oracle EBS CRM Users are employees sourced from HR schema (PER_ALL_ASSIGNMENTS_F) with CRM-specific responsibilities assigned via FND_RESPONSIBILITY. We extract the FND_USER and FND_RESPONSIBILITY tables during discovery to build an accurate user count and responsibility matrix. Users are mapped to Odoo res_users by matching email addresses. Any EBS user without a corresponding Odoo user is held in a reconciliation queue for the customer's admin to provision before record import begins. The responsibility matrix informs Odoo access rights group assignments.

Oracle EBS CRM

Workflow (WF_ tables, PL/SQL packages)

maps to

Odoo CRM

Odoo Studio / custom module

1:1
Fully supported

Oracle Workflows (stored in WF_ tables and implemented via PL/SQL packages) encode the routing, approval, and notification logic specific to EBS. These definitions cannot be exported as structured data and have no equivalent construct in Odoo's automation model. We document every active Workflow at discovery, capturing the triggering event, routing conditions, and approver assignments in a structured report. This report is handed off to the customer's Odoo implementation team to rebuild the automation logic using Odoo Studio or a custom module.

Oracle EBS CRM

Lead (Oracle EBS CRM Lead if module installed)

maps to

Odoo CRM

crm.lead (type = lead)

1:1
Fully supported

If the Oracle EBS CRM deployment includes the Teleservice or Interaction Center Lead module, Leads are stored in module-specific tables. We identify the correct table at discovery, extract lead name, status, source, and owner, and map to Odoo crm.lead with type = lead. The crm.lead record retains type = lead until the customer runs the Odoo lead_to_opportunity wizard, which converts it to type = opportunity and creates the associated partner record.

Oracle EBS CRM

Price Books / Product Catalog (Oracle Pricing tables)

maps to

Odoo CRM

product.product

1:1
Fully supported

If Oracle EBS Order Management or Pricing modules are in scope, Oracle product and price book data stored in the Oracle Pricing tables (QPN tables) maps to Odoo product_product records. Product name, description, list price, and cost map directly. If only CRM data is in scope (no Order Management migration), we extract product references as external ID strings on crm.lead rather than full product records, to avoid migrating financial data outside the agreed CRM 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.

Oracle EBS CRM logo

Oracle EBS CRM gotchas

High

No native REST API for EBS CRM data extraction

High

APPS schema coupling spans CRM, ERP, and HR in one database

High

Premier Support for EBS 12.1 ended — Extended Support for 12.2 has a cost cliff

Medium

Oracle Workflow engine has no direct migration path to cloud CRM automation

Medium

Per-module licensing creates billing ambiguity at destination

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

  • Odoo external API requires Custom plan — Standard cannot accept data loads

    The Odoo XML-RPC external API used to load migration data is only available on Custom and Enterprise pricing plans. Standard and One App Free plans have no API access, meaning no programmatic data migration is possible into those tiers. We verify the destination Odoo plan during scoping. If the customer is on a Standard plan, we either recommend upgrading to Custom before migration begins or we scope a manual data-import approach using Odoo's CSV import tool, which has a 1 million row limit and cannot handle complex custom object imports. This gotcha is a project blocker if the plan is not confirmed upfront.

  • Oracle EBS has no REST API — direct database access is the only extraction path

    Oracle E-Business Suite does not expose a standard REST or GraphQL API for CRM objects. All data extraction requires direct Oracle database queries against the APPS and base product schemas, or Oracle BI Publisher reports that export to XML/CSV. We connect directly to the Oracle database with read-only credentials scoped to the relevant schemas. Customers must provision database access credentials and confirm the network path between our migration infrastructure and the EBS database server. We validate the connection and run discovery queries to enumerate the target tables before running any migration. Any firewall, VPN, or credential provisioning delay extends the project timeline.

  • Odoo custom fields require module development before data import

    Odoo does not support creating custom fields via the external API at runtime. Any Oracle EBS CRM custom field that has no standard Odoo equivalent must be defined as an Odoo model field in a custom module (or via Odoo Studio on Enterprise) before data import begins. We extract the DDL for every Oracle EBS custom object and user-defined column during discovery, identify which fields lack a standard Odoo equivalent, and scope the custom Odoo module development as a pre-migration workstream. If custom field creation is not completed before the import window, those fields cannot receive data and the migration must be deferred.

  • APPS schema coupling means extraction touches the full EBS database

    Oracle EBS CRM is not a standalone application — the APPS schema aggregates code objects from all modules, and CRM data is stored alongside financial, HR, and supply chain data in the same database instance. We scope our extraction to CRM-relevant base schemas and APPS views at the table level, but any database backup, restore, or connection load testing during migration will affect the entire suite simultaneously. We coordinate with the customer's DBA to ensure only CRM data is queried and that concurrent write operations in non-CRM modules are not disrupted during the migration window. Large CRM extractions (over 10 million rows) may require scheduling outside peak business hours.

  • Odoo unified partner model flattens Oracle's Account-Contact distinction

    Oracle EBS CRM maintains a strict separation between Accounts (company-level records) and Contacts (individual-level records linked to Accounts). Odoo's res.partner model treats both as partner records, where individuals have parent_id pointing to the company partner and a customer_rank flag. We perform a 1:N split during transformation: each Oracle Account becomes an Odoo res.partner (company), and each Oracle Contact becomes a separate res.partner (individual) with parent_id set to the Account partner. This transformation is straightforward when Oracle Contact-to-Account relationships are clean; in environments with duplicate or orphaned contacts (common in long-running EBS deployments), deduplication is required before the partner insert.

Migration approach

Six steps for a successful Oracle EBS CRM to Odoo CRM data migration

  1. Discovery and plan verification

    We audit the source Oracle EBS CRM deployment across schema versions (12.1 vs 12.2), installed CRM modules (Teleservice, Interaction Center, Collaborative Selling), active Workflows, and data volumes per table. We identify the correct base schemas for Accounts (ARHZTA), Contacts (HR/AR), Opportunities (CZ or ASF), Activities, and custom objects. We simultaneously verify the destination Odoo plan: if the customer is on Standard or One App Free, we confirm their intent to upgrade to Custom before proceeding. We also extract FND_USER and FND_RESPONSIBILITY for user count and responsibility matrix. The discovery output is a written migration scope with table inventory, record counts, and plan verification confirmation.

  2. Odoo schema pre-work and custom module development

    Before any data loads, we work with the customer's Odoo developer or partner to create the custom Odoo module defining any non-standard fields required by the Oracle EBS data model. We design the crm_team structure mapping Oracle territories, configure crm_lead stage values to match Oracle opportunity stages, and set up the res_partner parent-child relationship model. If Odoo Studio is available (Enterprise plan), we use it for field creation; otherwise a custom module is developed and installed in a staging Odoo environment first. This step is a prerequisite for all subsequent import phases.

  3. Odoo staging environment migration and reconciliation

    We run a full migration into the customer's Odoo staging or sandbox environment using production-equivalent data volumes. The customer's CRM lead and Odoo admin reconcile record counts (Accounts in, Contacts in, Opportunities in, Activities in), spot-check 25-50 records against the Oracle EBS source, and verify that partner hierarchy (parent_id relationships), opportunity stages, and activity timelines render correctly in Odoo's UI. Any field mapping corrections, custom field additions, or transformation logic adjustments happen in this phase before touching production.

  4. User provisioning and owner reconciliation

    We extract every distinct Oracle EBS owner referenced on Account, Contact, Opportunity, and Activity records and match by email against the destination Odoo res_users table. Any EBS user without a matching Odoo user goes to a reconciliation queue. The customer's Odoo admin provisions missing users (with appropriate access rights groups based on the FND_RESPONSIBILITY matrix extracted during discovery) before record import resumes. OwnerId references in Odoo are required for CRM activity timeline accuracy.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res_partner (Accounts as companies), res_partner (Contacts as individuals with parent_id to Account), crm_lead (Opportunities with partner_id resolved), crm_lead (Lead records if the module is installed), product_product (if Order Management scope), mail_message (Notes and history), crm_phonecall (Activities), ir_attachment (Attachments via BASE64 blob upload), and custom object records last (with foreign key references resolved). Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC with batch chunking and handle rate-limit responses with retry logic.

  6. Cutover, validation, and automation rebuild handoff

    We freeze Oracle EBS CRM write access during the cutover window, run a final delta migration of any records modified during the migration window, then switch the customer to Odoo CRM as the system of record. We deliver the Workflow and Oracle Territory inventory document to the customer's Odoo implementation team for rebuild using Odoo Studio or custom module development. We support a one-week hypercare window where we resolve any data quality issues raised by the customer's sales team. We do not rebuild Oracle Workflows as Odoo automations inside the migration scope; that is a separate engagement or an internal Odoo development task.

Platform deep dives

Context on both ends of the pair

Oracle EBS CRM logo

Oracle EBS CRM

Source

Strengths

  • Unified APPS schema provides a single database layer across ERP, CRM, HR, and supply chain — reducing data duplication across the organization.
  • Deep Oracle database integration means CRM transactions are ACID-compliant by default, with full transactional consistency between sales and financial records.
  • Comprehensive multi-org, multi-currency, and multi-language capabilities are built in, supporting global enterprise sales structures without third-party add-ons.
  • Oracle's established partner ecosystem and 30+ year market presence provide enterprise procurement confidence and long-term support availability.
  • The APPS schema architecture means cross-module reporting can be done via direct SQL without requiring middleware or ETL pipelines.

Weaknesses

  • No standard modern REST API for CRM data — all extraction requires direct database access, BI Publisher reports, or Oracle Data Integrator, which complicates migration tooling.
  • The entire EBS suite runs in a single monolithic database instance, making it difficult to extract only the CRM layer without touching ERP or HR data structures.
  • User interface and UX design reflect 2000s-era application patterns — usability for day-to-day CRM tasks lags significantly behind modern SaaS alternatives.
  • The upgrade lifecycle requires significant IT project investment every major release, with documented upgrade timelines of a quarter or longer for version changes.
  • Oracle's support roadmap is pushing customers toward Fusion Cloud migration, which reduces the long-term viability of remaining on EBS for CRM-only workloads.
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. 1 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 EBS CRM and Odoo CRM.

  • Object compatibility

    B

    1 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 EBS CRM: Not applicable — direct database query, throttling depends on customer's DB server capacity and concurrent workload.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Oracle EBS CRM to Odoo CRM migrations land between eight and twelve weeks for deployments under 15,000 Accounts, 5,000 Opportunities, and no custom objects. Migrations with custom objects, large historical activity volumes (over 200,000 records), multi-org EBS configurations, or Odoo environments that require custom module development for non-standard field types move to fourteen to twenty-two weeks because of schema design, module development, and the direct database extraction complexity specific to Oracle EBS.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Oracle EBS 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