CRM migration

Migrate from Oracle Eloqua to Twenty CRM

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

Oracle Eloqua logo

Oracle Eloqua

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

70%

7 of 10

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

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Oracle Eloqua to Twenty CRM is a data-extraction and schema-reconciliation project, not a platform-to-platform parity move. Eloqua's object model centers on Contacts and Accounts as the foundation of a marketing automation environment; Twenty CRM uses a sales-native Contact and Company model with Opportunities, Tasks, and Activities. We extract Eloqua Contacts, Accounts, and Custom Data Objects via the Bulk API with its documented hourly soft limits, map them to Twenty's typed fields, and resolve the lookup relationships that bind them. Campaign orchestration logic, lead scoring models, form configurations, and email asset HTML do not migrate as working records; we document every campaign, automation flow, and scoring weight during discovery and deliver that as a written rebuild guide for your marketing operations team. The migration uses incremental Bulk API jobs chunked under Eloqua's 5 GB file cap, with parent-record resolution ensuring that Account and Contact lookups are satisfied before activity records insert.

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

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Oracle Eloqua objects map to Twenty CRM

Each row shows how a Oracle Eloqua object lands in Twenty 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

Twenty CRM

Contact

1:1
Fully supported

Eloqua Contacts map directly to Twenty CRM Contacts. Standard fields (first name, last name, email address, phone, title, address) map to Twenty's typed Contact fields. Custom fields from Eloqua's contact field schema migrate to custom fields on the Twenty CRM Contact object. We resolve the EmailAddress field as the dedupe key to prevent duplicate Contacts on re-import. The original Eloqua Contact ID is preserved in a custom field for audit and cross-referencing purposes.

Oracle Eloqua

Account

maps to

Twenty CRM

Company

1:1
Fully supported

Eloqua Accounts map to Twenty CRM Companies. Account-level fields including industry, website, employee count, and revenue range map to the equivalent Company fields. The account-to-contact relationship is preserved by resolving the parent Company before Contact insert so that the Contact-Company association is established at migration time rather than patched afterward.

Oracle Eloqua

Contact

maps to

Twenty CRM

Activity (engagement history)

1:many
Fully supported

Eloqua engagement records (email opens, email clicks, form submissions, page visits) are exported as separate activity entries and mapped to Twenty CRM Activity records linked to the corresponding Contact. Each activity record captures the engagement type, timestamp, asset name, and URL. The activity ordering is preserved by setting the Activity date to the original Eloqua event timestamp.

Oracle Eloqua

Custom Data Object (CDO)

maps to

Twenty CRM

Custom fields or extension table

1:1
Fully supported

Each CDO in Eloqua has its own schema with customer-defined fields. We export CDO records via Bulk API and map them to custom fields on the equivalent Twenty CRM object (Contact, Company, or Opportunity) where the field count is small (under 20 fields). For CDOs with complex schemas or more than 20 fields, we create extension tables in Twenty CRM and link them to the parent record via the original CDO's primary key. This requires pre-designing the extension schema before migration begins.

Oracle Eloqua

Campaign

maps to

Twenty CRM

Campaign (documentation only)

1:1
Fully supported

Eloqua Campaigns contain multi-step orchestration logic, wait steps, conditions, and trigger configurations that are tightly coupled to Eloqua's execution engine and cannot be exported as working records. We export campaign metadata (name, type, start/end dates, status, targeting criteria) and map campaign membership (which Contacts were added to which campaigns) as a tagged field on the Contact record. The customer's marketing ops team uses the campaign documentation to rebuild in their chosen automation tool.

Oracle Eloqua

Segment and Shared List

maps to

Twenty CRM

Contact (tagged)

lossy
Fully supported

Eloqua Segments define dynamic contact audiences based on filter criteria, and Shared Lists are static contact collections. We export the list membership (the actual Contacts in each segment or list) and tag each Contact with the segment or list names as a multi-value field in Twenty CRM. The dynamic filter logic that defines segment membership cannot be exported and must be reconstructed as a segment or filter in the destination platform.

Oracle Eloqua

Email Asset

maps to

Twenty CRM

Activity (documentation)

1:1
Fully supported

Email HTML content, subject lines, sender addresses, and metadata are exported from Eloqua's asset library. The HTML is preserved as an attachment or note on the corresponding Activity record in Twenty CRM. Email rendering depends on the destination email tool's template engine and cannot be reconstructed as a working email template. The customer's admin uses the exported HTML as reference content for rebuilding in a new email platform.

Oracle Eloqua

Form

maps to

Twenty CRM

Form (documentation)

1:1
Fully supported

Eloqua form field configurations (field names, field types, required flags, thank-you page settings) are exported as a JSON document and mapped to a Form documentation record in Twenty CRM. The visual layout and embedded JavaScript of Eloqua forms cannot be exported as working components. The customer's web team uses the field configuration documentation to rebuild forms in their web property or preferred form tool.

Oracle Eloqua

Lead Scoring Model

maps to

Twenty CRM

Lead Scoring Model (documentation)

1:1
Fully supported

Eloqua's weighted demographic and behavioral lead scoring models are stored in proprietary configuration with no export mechanism. We document the current scoring model structure: which fields contribute, what weights are assigned, what thresholds trigger a score change, and how scores integrate with CRM opportunity data. The customer uses this documentation to implement equivalent scoring logic in their chosen sales or marketing intelligence tool.

Oracle Eloqua

Picklist

maps to

Twenty CRM

Picklist (configuration)

lossy
Fully supported

Eloqua picklists define controlled vocabulary for custom fields. We export picklist definitions (display names and stored values) as a CSV and re-create them as picklist configurations in Twenty CRM where the platform supports picklist fields. This ensures that migrated custom field data uses consistent vocabulary rather than free-text values that would require cleanup after migration.

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

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Eloqua's 50-requests-per-minute API rate limit throttles bulk extraction

    Eloqua enforces a maximum of 50 API requests per minute across the REST API, which directly constrains how fast we can extract contact records, activity events, and CDO data. For databases exceeding 100,000 contacts, this limit extends extraction timelines significantly. We mitigate by using the Bulk API 2.0 for large record sets, which operates on a job-based model rather than per-request counting, and by chunking large activity exports into multiple sequential jobs. Without this approach, migrations either hit throttling errors or require multi-day extraction runs.

  • Eloqua's 5 GB import file cap requires chunking for large databases

    Eloqua restricts individual import files to 5 GB maximum. Large contact databases, extended activity history spanning multiple years, or CDO exports with large binary fields can exceed this limit. We split exports into sub-5GB chunks, sequence them by dependency (Accounts before Contacts, Contacts before Activities), and validate each chunk before loading the next. Skipping this step causes import failures that require re-export and restart of the affected phase.

  • Campaign and Program logic cannot be migrated as working automation

    Eloqua's Campaign Canvas and Program Builder store orchestration logic (wait steps, conditional branches, trigger criteria, CRM action calls) in a way that is tightly coupled to Eloqua's execution engine and has no export mechanism. Any migration that claims to move campaigns as working automation is not preserving the underlying logic. We export campaign metadata and list membership, document the automation flows in writing, and deliver a rebuild guide. The customer's marketing ops team reconstructs campaigns in their chosen automation platform. This is a fundamental limitation of the source platform, not a FlitStack AI scope constraint.

  • Lead Scoring models have no export path

    Eloqua's lead scoring configuration, including weighted demographic scores, behavioral scores, and score thresholds, is stored in a proprietary format with no API endpoint for export. We document the scoring model during discovery by interviewing the customer's marketing ops team, reviewing the scoring rules in the Eloqua UI, and capturing the field weights and threshold values in a written specification. The customer implements the equivalent scoring logic in their destination platform using this specification as a blueprint.

  • Eloqua-to-CRM integration data does not migrate as synced records

    Organizations running Eloqua with a Salesforce, Oracle Sales, or Microsoft Dynamics integration have contact and account data that lives in both systems with bidirectional sync. When migrating from Eloqua to Twenty CRM, the CRM side of the existing sync relationship has no direct migration path because Twenty CRM is not the CRM that Eloqua was integrated with. We extract the most current contact and account data from Eloqua as the source of truth, map it to Twenty CRM, and flag any records where the CRM had more recent data than Eloqua for the customer's admin to reconcile manually.

Migration approach

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

  1. Discovery and data audit

    We audit the Eloqua environment across all objects: contact volume, account volume, CDO count and schema, activity record volume by type (email, form, page visit, campaign response), campaign count, segment and list membership, and lead scoring model structure. We also identify any third-party integrations that route data through Eloqua, as those connection points will need to be re-established with Twenty CRM. The discovery output is a written data inventory with record counts per object, field-level schema for each CDO, and a preliminary object mapping plan.

  2. Destination schema design and field mapping

    We design the Twenty CRM destination schema based on the discovered Eloqua data model. This includes creating custom fields on Contact, Company, and Activity objects for Eloqua-specific data that has no direct Twenty CRM equivalent. We define the field mapping between Eloqua contact fields and Twenty CRM contact fields, resolve the Account-to-Company parent lookup, and design extension tables for CDOs that exceed the custom field threshold. The mapping document is reviewed by the customer's admin before any extraction begins.

  3. Sandbox extraction and reconciliation

    We run an initial extraction from Eloqua into a staging environment using a representative data sample (typically 5-10% of total record volume). This validates the Bulk API extraction logic, confirms field-level data quality, identifies any picklist value mismatches, and produces a reconciliation report showing what Eloqua exported versus what arrived in Twenty CRM. Corrections to the field mapping, data transformation rules, and chunking strategy happen at this stage before production extraction begins.

  4. Bulk API extraction with rate-limit compliance

    We extract Eloqua data in dependency order: Accounts first (for Company creation in Twenty CRM), then Contacts (with AccountId resolved to the parent Company), then CDO records (with parent lookups resolved), then Activity records (with ContactId resolved for each engagement event), then segment and list membership (as tags on Contact records). Each extraction job uses Eloqua's Bulk API 2.0 with chunking to stay under the 5 GB file cap and sequential job scheduling to respect rate limits. Activity records spanning multiple years are split by year to prevent single-job timeout.

  5. Production import and validation

    We import into Twenty CRM in the same dependency order used for extraction. Each phase (Companies, Contacts, CDOs, Activities, Tags) emits a row-count reconciliation report showing inserted records, updated records, and errors. We validate a random sample of 25-50 records per phase against the Eloqua source to confirm field-level accuracy. Any records that fail validation (missing required fields, lookup resolution errors, picklist mismatches) are corrected in the staging environment and re-imported before the next phase begins.

  6. Cutover, campaign rebuild handoff, and documentation delivery

    We coordinate a cutover window during which no new records are created in Eloqua. A final delta extraction captures any records modified during the migration window. After cutover, we deliver the campaign and automation rebuild guide: campaign metadata, scoring model specification, segment filter definitions, and form field configurations organized by the Eloqua object they belong to. This document is the handoff artifact that the customer's marketing ops team uses to reconstruct automation logic in their chosen replacement platform. We do not rebuild campaigns or scoring models as a standard migration scope.

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

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

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 Eloqua and Twenty 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 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 Twenty 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 Twenty CRM data migrations

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

Can't find your answer?

Walk through your Oracle Eloqua to Twenty 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 six weeks for databases under 50,000 Contacts with a small number of CDOs and limited activity history. Migrations with multiple CDO schemas, engagement histories exceeding 500,000 activity records, or organizations requiring comprehensive campaign documentation extend to eight to twelve weeks. Discovery and schema design take one to two weeks regardless of size, followed by extraction, import, validation, and cutover.

Adjacent paths

Related migrations to explore

Ready when you are

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