CRM migration
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
Source
Odoo CRM
Destination
Compatibility
11 of 13
objects map 1:1 between Oracle EBS CRM and Odoo CRM.
Complexity
BStandard
Timeline
8-12 weeks
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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)
Odoo CRM
res.partner (customer_rank = 1)
1:1Oracle 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)
Odoo CRM
res.partner (customer_rank = 1, parent_id = Account partner)
1:manyOracle 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)
Odoo CRM
crm.lead
1:1Oracle 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)
Odoo CRM
crm.phonecall or project.task
1:1Oracle 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)
Odoo CRM
ir.model.data (custom module)
1:1Oracle 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)
Odoo CRM
ir.attachment
1:1Attachments 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)
Odoo CRM
mail.message
1:1Notes 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)
Odoo CRM
crm.team
lossyOracle 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)
Odoo CRM
crm.lead (forecast field)
1:1Oracle 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)
Odoo CRM
res.users
1:1Oracle 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)
Odoo CRM
Odoo Studio / custom module
1:1Oracle 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)
Odoo CRM
crm.lead (type = lead)
1:1If 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)
Odoo CRM
product.product
1:1If 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.
| Oracle EBS CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Account (ARHZTA base tables) | res.partner (customer_rank = 1)1:1 | Fully supported | |
| Contact (HR/AR schemas) | res.partner (customer_rank = 1, parent_id = Account partner)1:many | Fully supported | |
| Opportunity (CZ schema) | crm.lead1:1 | Fully supported | |
| Sales Activities / Tasks (Interaction Center or Teleservice tables) | crm.phonecall or project.task1:1 | Fully supported | |
| Custom Objects (user-defined tables in base product schemas) | ir.model.data (custom module)1:1 | Fully supported | |
| Attachments (BFILE/CLOB in database or file system) | ir.attachment1:1 | Fully supported | |
| Notes / History (FZ_NOTES or application audit trail) | mail.message1:1 | Fully supported | |
| Territory (AS_TERRITORIES base tables) | crm.teamlossy | Fully supported | |
| Forecasts (CZ tables, Collaborative Selling module) | crm.lead (forecast field)1:1 | Fully supported | |
| Users / Employees (FND_USER, FND_RESPONSIBILITY, PER_ALL_ASSIGNMENTS_F) | res.users1:1 | Fully supported | |
| Workflow (WF_ tables, PL/SQL packages) | Odoo Studio / custom module1:1 | Fully supported | |
| Lead (Oracle EBS CRM Lead if module installed) | crm.lead (type = lead)1:1 | Fully supported | |
| Price Books / Product Catalog (Oracle Pricing tables) | product.product1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No native REST API for EBS CRM data extraction
APPS schema coupling spans CRM, ERP, and HR in one database
Premier Support for EBS 12.1 ended — Extended Support for 12.2 has a cost cliff
Oracle Workflow engine has no direct migration path to cloud CRM automation
Per-module licensing creates billing ambiguity at destination
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Oracle EBS CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Oracle EBS CRM and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Oracle EBS CRM: Not applicable — direct database query, throttling depends on customer's DB server capacity and concurrent workload.
Data volume sensitivity
Oracle EBS CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Oracle EBS CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Oracle EBS CRM
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.