CRM migration

Migrate from Oracle Eloqua to Odoo CRM

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

Oracle Eloqua logo

Oracle Eloqua

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

93%

13 of 14

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

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Oracle Eloqua to Odoo CRM is a platform-category migration. Eloqua is an enterprise B2B marketing automation platform built around Contacts, Accounts, Custom Data Objects, Campaigns, and engagement tracking; Odoo CRM is the sales CRM layer within an open-source ERP suite, built around Contacts, Companies, Opportunities, Pipelines, and Activities. The primary challenge is restructuring a marketing-centric data model into a sales-centric one. We resolve the Contact-to-Contact and Account-to-Company mapping, split multi-object CDO structures into Odoo custom fields or Project tasks, and map Eloqua engagement events to Odoo's CRM Activity records (calls, emails, meetings, tasks, notes). We flag Lead Scoring models, Campaigns, Programs, and Segments as rebuild-required because they have no export mechanism in Eloqua and no native Odoo equivalent. Odoo's XML-RPC API with rate-limit handling drives the data transfer; the 5GB file cap on Eloqua bulk exports is managed through chunked extraction before XML-RPC ingestion. Workflows, automation logic, forms, landing pages, and email assets do not migrate as functional equivalents; we deliver written inventories for manual rebuild by the customer's admin team.

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 Eloqua logo

Oracle Eloqua

What's pushing teams away

  • The $2,000/month starting price plus per-contact and per-send overage charges make Eloqua cost-prohibitive for mid-market teams not running enterprise-scale campaigns.
  • Oracle's declining investment in Eloqua innovation, including workforce reductions in the CX group, has prompted organizations to evaluate platforms with more active development roadmaps.
  • The legacy interface and steep learning curve frustrate smaller marketing teams who need intuitive tools rather than enterprise-grade complexity requiring dedicated admin support.
  • Organizations report limited customization in reporting and dashboards, forcing them to export data to BI tools for the analysis they need.
  • Implementation timelines of several weeks to months plus the need for ongoing dedicated marketing ops resources create total cost of ownership that outpaces platform value for some teams.

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

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

Contact

maps to

Odoo CRM

Contact

1:1
Fully supported

Eloqua Contacts map directly to Odoo CRM Contacts. All standard fields (FirstName, LastName, Email, Phone, Address) and custom fields migrate as direct field-to-field mappings. The Eloqua ContactType and marketability flags (opt-in, bounced, unsubscribed) map to Odoo's opt_in field and a custom marketing_status selection field. Import is sequenced after Companies because the Contact's CompanyId (many2one) reference must resolve at insert time. Odoo's XML-RPC API ingests contacts in batches of up to 100 per request with exponential backoff on rate-limit responses.

Oracle Eloqua

Account

maps to

Odoo CRM

Company

1:1
Fully supported

Eloqua Accounts map to Odoo Companies. The organization name, domain, industry, address fields, and custom fields migrate as direct mappings. Country and State fields in Odoo require ID references rather than string values; we resolve these via Odoo's res.country and res.country.state lookup tables during the transform phase. Company is created before Contact import so that the many2one relationship is satisfied at the moment of Contact insert.

Oracle Eloqua

Custom Data Objects (CDOs)

maps to

Odoo CRM

Custom Fields or Project Tasks

lossy
Mapping required

Eloqua CDOs are customer-defined objects with independent schemas. Odoo has no native CDO equivalent, so we pre-create the destination schema using Odoo Studio custom fields on the Contact or Company object for simple CDOs, or Odoo Project Tasks with custom fields for multi-record CDOs that require a separate data table. We export the CDO schema (field names, data types, picklists) during discovery, create the Odoo custom field structure via the Settings interface, then import CDO records with lookup resolution to the parent Contact or Account. Each CDO migration is scoped independently because schema complexity varies significantly.

Oracle Eloqua

Campaign

maps to

Odoo CRM

Opportunity (metadata only)

1:1
Fully supported

Eloqua Campaign metadata (name, status, start and end dates, campaign type, budget, targeting criteria) migrates as Opportunity records in Odoo CRM with a custom eloqua_campaign_id field for audit. The multi-step campaign canvas logic (wait steps, conditional branches, trigger-based actions) is tightly coupled to Eloqua's campaign engine and cannot be exported. We document the campaign structure in a written campaign map during discovery, including step order, branching logic, and trigger conditions, for the customer's admin to manually rebuild in Odoo Marketing Automation app or as a Project task checklist.

Oracle Eloqua

Program

maps to

Odoo CRM

Project (metadata only)

1:1
Fully supported

Eloqua Programs (orchestration containers within Campaigns) migrate as Odoo Project records with Program metadata preserved in custom fields. The Program's step sequence, engagement rules, and nurture logic do not export. We deliver a Program logic inventory document during discovery that lists every Program's name, objective, step count, and action types so the admin can rebuild as Odoo Marketing Automation rules or a manual Project task checklist.

Oracle Eloqua

Segment and Shared List

maps to

Odoo CRM

CRM Group or Tags

1:1
Fully supported

Eloqua Segments define dynamic contact audiences based on filter criteria; Shared Lists are static contact collections. We export segment filter definitions and list membership counts. Dynamic segment filter logic cannot be reconstructed automatically in Odoo because Odoo's CRM has no native segmentation engine for dynamic audience building. We deliver a segmentation inventory document listing each segment's filter conditions and contact count for manual rebuild using Odoo CRM Groups or tag-based filtering. Shared list memberships are preserved by adding all contacts in a list to a corresponding Odoo CRM Group.

Oracle Eloqua

Email Asset

maps to

Odoo CRM

Email Template (partial)

1:1
Fully supported

Eloqua Email assets export as HTML content, subject lines, sender and reply-to addresses, and basic configuration. We transfer the HTML body and metadata. Rendering-specific elements such as Eloqua's field merge tokens, dynamic content blocks, and images embedded in Eloqua's asset library require manual rebuild in Odoo's email template builder because the destination email engine uses different token syntax and image hosting. We preserve the HTML source and a list of dynamic elements that need manual recreation.

Oracle Eloqua

Form

maps to

Odoo CRM

Website Form Configuration

1:1
Fully supported

Eloqua form field configurations (field names, field types, required flags, submission handling rules) export from the Custom Object Record Services and form metadata. We deliver a form field inventory documenting field names, types, labels, and submission logic for manual rebuild in Odoo's Website Form builder or Survey app. The visual layout and design of forms do not migrate and require rebuilding in Odoo's drag-and-drop form editor.

Oracle Eloqua

Lead Scoring Model

maps to

Odoo CRM

Not Applicable

1:1
Fully supported

Eloqua's weighted demographic and behavioral Lead Scoring models are stored in proprietary configuration that has no export mechanism. We document the current scoring model structure during discovery: scoring categories, weight percentages, demographic triggers, and behavioral thresholds. The customer's admin rebuilds the model in Odoo using a combination of custom fields, computed scores, and optional third-party scoring apps available on the Odoo Marketplace. We do not attempt to export or approximate the scoring values.

Oracle Eloqua

Activity: Email Open/Click

maps to

Odoo CRM

CRM Activity (note)

1:1
Fully supported

Eloqua tracks email engagement events (opens, clicks, bounces) as activity records linked to Contacts. We export these as Odoo CRM Note activities with the original event type, timestamp, and asset name preserved in custom fields. The engagement event type maps to a selection field (opened, clicked, bounced, unsubscribed) and the related email asset is referenced by name. Note body captures the event summary for the activity timeline.

Oracle Eloqua

Activity: Form Submission

maps to

Odoo CRM

CRM Activity (note)

1:1
Fully supported

Eloqua form submission events export as Odoo CRM Note activities. The note records the form name, submission date, fields submitted, and the associated Contact. We preserve the field-level submission data in the note body for rep context during the activity timeline review.

Oracle Eloqua

Activity: Page Visit

maps to

Odoo CRM

CRM Activity (note)

1:1
Fully supported

Eloqua page visit events (tracked web pages) export as Odoo CRM Note activities with the page URL, visit timestamp, and session duration preserved in custom fields. Odoo does not have native web tracking, so these migrate as historical activity records for reference rather than live tracking data. The customer's admin rebuilds web tracking using Odoo's Website analytics or a third-party integration if continued tracking is required.

Oracle Eloqua

Picklist

maps to

Odoo CRM

Selection Field

1:1
Fully supported

Eloqua picklists (controlled vocabulary for custom fields) export as CSV including display names and stored values. We re-create them as Odoo selection fields or many2one relations to a dedicated res.config.data model depending on picklist size and usage frequency. Small picklists (under 20 values) become Odoo selection fields; large picklists with independent records become dedicated many2one targets so that new values can be added without a field migration.

Oracle Eloqua

Image and Attachment

maps to

Odoo CRM

Document

1:1
Fully supported

Eloqua asset library images and attachments download via the Bulk API asset endpoints. We re-upload them to Odoo's Document Management module (ir.attachment) and link them to the corresponding Contact, Company, or Opportunity record via res_id and res_model. Externally hosted images referenced by URL remain accessible; images embedded directly in Eloqua's asset library are preserved as binary downloads and re-uploaded to Odoo Documents.

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 Eloqua logo

Oracle Eloqua gotchas

High

Contact-based pricing model inflates migration scope

High

No native export or migration tooling in Eloqua

Medium

Bulk API soft limits throttle large data transfers

Medium

5 GB import file size cap complicates bulk data loads

Low

SOAP API deprecated; REST/Bulk APIs require endpoint caching

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

  • Lead Scoring models cannot be exported from Eloqua

    Eloqua stores Lead Scoring configurations in proprietary internal formats that have no public export API or data dump mechanism. Any scoring model (demographic weights, behavioral thresholds, tier thresholds) must be manually documented during discovery and rebuilt from scratch in Odoo. We deliver a detailed scoring model inventory document listing every scoring category, weight, trigger condition, and tier boundary so the customer's admin can reproduce the model using Odoo custom fields and computed values or a third-party scoring app. This work is not included in the migration scope and requires separate admin time.

  • Campaign and Program logic does not export and has no Odoo equivalent

    Eloqua's campaign canvas, with its conditional branching, wait steps, trigger-based execution, and multi-channel orchestration, is tightly coupled to the Eloqua campaign engine and cannot be exported as functional logic. Odoo CRM does not have a native campaign canvas; the closest equivalents are Odoo Marketing Automation (limited rule-based automation) and Odoo Project (task-based process tracking). We document every Campaign and Program's structure, step order, and logic for manual rebuild, but the automation logic itself is not migrated. This is one of the largest gaps in the migration scope and must be communicated to stakeholders upfront.

  • Eloqua Bulk API hourly limits extend timelines for large databases

    Eloqua's Bulk API enforces hourly soft limits of approximately 2,000 records per hour for exports and imports. For contact databases exceeding 100,000 records or large engagement histories, migration timelines extend proportionally. We chunk large exports into rate-compliant batches, throttle API calls with exponential backoff on 429 responses, and sequence phases by dependency (Companies before Contacts, Contacts before Activities). Customers with databases over 500,000 total records should plan for timelines at the upper end of the estimate and consider a data archival strategy (moving inactive records to an archive rather than migrating them) to reduce volume.

  • Odoo XML-RPC API requires field type precision not enforced in Eloqua

    Odoo's XML-RPC API enforces strict data types: date fields must be valid date strings, many2one references must be integer IDs (not string names), and selection fields must use exact value strings from the field definition. Eloqua's field validation is more permissive and often stores data in inconsistent formats. We run a pre-import validation pass that catches date format inconsistencies, resolves string-to-ID lookups via Odoo's search读取, and flags any picklist value that does not exist in the destination field definition. Without this validation, XML-RPC calls return silent failures or 500 errors that corrupt the import batch.

  • Contact-based billing flag has no Odoo CRM equivalent

    Eloqua's marketable contact flag (determining whether a record counts toward the contact-based billing tier) is Eloqua-specific and has no Odoo CRM equivalent. We preserve the marketability status in a custom field on the migrated Odoo Contact record so that if the customer later implements Odoo Marketing Automation or another marketing platform, they can re-segment based on the original Eloqua marketability classification. The flag is informational in Odoo CRM and does not trigger any automated behavior.

Migration approach

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

  1. Discovery and data audit

    We audit the source Eloqua environment across tier (Basic/Standard/Enterprise), contact volume, Account count, CDO list (schema and record count per CDO), active Campaign count and complexity, Segment definitions and contact counts, engagement history volume, picklist definitions, and any existing CRM integrations. We also inventory all active automations, scoring models, and email assets requiring documentation. The discovery output is a written migration scope document covering record counts, schema mapping decisions, and a list of all objects requiring manual rebuild (Lead Scoring, Campaigns, Programs, Segments, Forms).

  2. CDO schema design and Odoo custom field creation

    For each Eloqua CDO, we design the Odoo destination schema before any data moves. Simple CDOs with fewer than 10 fields become Odoo Studio custom fields on the Contact or Company object. Complex CDOs with independent record structures and relationships become Odoo Project Tasks with custom fields to preserve the multi-record data model. We create all custom fields via Odoo Settings before migration begins and validate that the XML-RPC API can write to each new field.

  3. Sandbox migration and reconciliation

    We run a full migration into an Odoo test database using production-like data volume. The customer's Odoo administrator reconciles record counts (Contacts in, Companies in, Activities in), spot-checks 25-50 random records against the Eloqua source, and validates that picklist values render correctly in Odoo's UI. Any field mapping corrections, data type adjustments, or picklist gaps are resolved in this phase before production migration begins.

  4. Production migration in dependency order

    We run production migration in strict record-dependency order: Companies (from Eloqua Accounts, establishing the Company ID map), Contacts (with many2one CompanyId resolved, and marketability flags preserved in custom fields), CDO records (with parent Contact or Company lookup resolved), Picklists (re-created as selection fields or many2one targets before any dependent field import), Email assets (HTML and metadata for documentation), Form configurations (field inventory for manual rebuild), Activity history (email engagement, form submissions, page visits as CRM Note activities), and Image and Attachment assets (downloaded from Eloqua and re-uploaded to Odoo Documents). Each phase emits a row-count reconciliation report before the next phase begins.

  5. Campaign, Program, and Scoring inventory delivery

    We deliver the written inventory documents: the Campaign logic map (step order, branching logic, trigger conditions for each Campaign), the Program structure document, the Segmentation inventory (filter criteria and contact counts for each segment), the Lead Scoring model documentation (weight categories, thresholds, behavioral triggers), and the Form field inventory. These documents are the handoff artifacts for the customer's admin team to begin manual rebuild of automations in Odoo Marketing Automation or as Project task checklists.

  6. Cutover, validation, and post-migration support

    We freeze new Eloqua record creation during the cutover window, run a final delta migration of any records modified since the last batch, then enable Odoo CRM as the system of record. We perform a final record count reconciliation against the source and validate that all Contact-to-Company relationships resolved correctly. We provide a one-week hypercare window to resolve any data quality issues reported by the customer's sales team. We do not rebuild Eloqua automations, scoring models, or email templates inside the migration scope; those are separate engagements or internal admin tasks.

Platform deep dives

Context on both ends of the pair

Oracle Eloqua logo

Oracle Eloqua

Source

Strengths

  • Industry-standard enterprise marketing automation with two decades of campaign orchestration maturity
  • Deep native CRM integration with Salesforce, Microsoft Dynamics, and Oracle CX Sales applications
  • Advanced multi-touch lead scoring with weighted demographic and behavioral components
  • Scalable contact database architecture supporting large enterprise B2B marketing programs
  • Robust Bulk API with documented rate limits enabling reliable batch data operations

Weaknesses

  • Contact-based pricing model creates unpredictable costs as database scales with email volume overages
  • No native data migration tooling; all migrations require custom export/import processes or third-party services
  • Steep learning curve and legacy interface design requiring dedicated marketing operations resources
  • Limited reporting customization forces teams to export data to external BI platforms for advanced analysis
  • Oracle's declining investment in Eloqua CX innovation raises long-term platform viability concerns
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 Oracle Eloqua and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Oracle Eloqua 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

    Oracle Eloqua: Bulk API: 2,000 records/hour per sync type; REST API: 10-20 concurrent requests depending on tier.

  • Data volume sensitivity

    A

    Oracle Eloqua exposes a bulk API — large-volume migrations stream efficiently.

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations land between four and six weeks for accounts under 25,000 Contacts and no CDOs with clean data and documented campaign logic. Migrations with multiple CDOs, engagement histories exceeding 500,000 records, or complex picklist structures move to ten to sixteen weeks because of CDO schema design, Odoo Studio custom field creation, XML-RPC chunking for large activity histories, and the campaign logic documentation work. The Eloqua Bulk API's 2,000-record-per-hour rate limit is the primary timeline constraint for large databases.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Oracle Eloqua.
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