CRM migration

Migrate from Oracle CRM On Demand to Twenty CRM

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

Oracle CRM On Demand logo

Oracle CRM On Demand

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

80%

8 of 10

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

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Oracle CRM On Demand to Twenty CRM is a migration from a deprecated enterprise platform to a modern open-source CRM. Oracle CRM On Demand has been effectively sunset in favor of Oracle Sales Cloud, leaving organizations on an unsupported trajectory with dated tooling and high total cost of ownership. Twenty CRM, built on TypeScript and NestJS with a Next.js frontend, offers a self-hosted model with no per-seat licensing and a modern interface that development teams can contribute to directly. The migration requires resolving Oracle's 30 requests per minute API rate limit through batch sequencing, respecting the 168-hour window for list export file downloads, and mapping Oracle's Accounts, Contacts, Leads, Opportunities, and Activities to Twenty's Companies, People, and Opportunities objects. Custom objects require schema reverse-engineering from the source tenant before mapping. Workflow Rules, Assignment Rules, and Oracle Migration Tool configurations do not migrate; we deliver written documentation for the customer's admin to rebuild these in Twenty's settings. We do not provide post-migration workflow rebuild or training as standard scope.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Oracle CRM On Demand logo

Oracle CRM On Demand

What's pushing teams away

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

Choosing

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

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

Account

maps to

Twenty CRM

Company

1:1
Fully supported

Oracle Account records map directly to Twenty Company records. We normalize the Account Name, extract and structure address records (address fields from Oracle's location structure map to Twenty's address compound fields), and assign the Owner to the corresponding Twenty User resolved by email match. Oracle Account Type (Customer, Prospect, Partner, Competitor, etc.) maps to a Twenty custom field since Twenty's standard Company model uses a single Companies object without a built-in type classification.

Oracle CRM On Demand

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Oracle Contact records map to Twenty Person records. We preserve name fields (first, last, title), email (used as dedupe key during import), phone, and any custom fields. Contact-to-Account linking is preserved by resolving the Oracle AccountId to the corresponding Twenty Company record on the Person's company_id field. Email deduplication runs against the Person table to prevent duplicate Person records for shared email addresses across the organization.

Oracle CRM On Demand

Lead

maps to

Twenty CRM

Person (or Lead)

1:many
Fully supported

Oracle Leads require a split decision during migration scoping. If the source tenant is on the Enterprise Lead Referral tier, lead records are create-only via API with no edit or convert capability, meaning historical lead data may be limited. For standard tier tenants, we assess the Lead record state: Leads that are unqualified prospects map to Twenty Person records in a 'Lead' context; Leads that have been worked and contain sales activity may be converted in Oracle and migrate as Person records with opportunity associations. The Oracle Lead_Source and Lead_Status fields map to Twenty Person custom fields for attribution and status tracking.

Oracle CRM On Demand

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Oracle Opportunity records map directly to Twenty Opportunity records. StageName, Amount, Probability, Close_Date, and Description transfer directly. Oracle's Opportunity-to-Account association maps to Twenty's opportunity.company_id pointing to the migrated Company. Opportunity-to-Contact associations map via Twenty's opportunity.personId pointing to the migrated Person. We flag Opportunity records with no associated Account for admin reconciliation before production import.

Oracle CRM On Demand

Activity: Task

maps to

Twenty CRM

Task

1:1
Fully supported

Oracle Task records map to Twenty Task records with Status, Priority, Subject, and due date preserved. Task assignment migrates by resolving Oracle's OwnerId to the Twenty User mapping table. Oracle's Task types (Call, Follow-up, Email, etc.) map to a Twenty custom task_type field since Twenty's standard Task model does not enforce a TaskSubtype enumeration. Activity ordering is preserved by setting Task due_date to the original Oracle timestamp.

Oracle CRM On Demand

Activity: Call

maps to

Twenty CRM

Task (task_type = Call)

1:1
Fully supported

Oracle Call records map to Twenty Task records with task_type set to Call. Oracle call disposition, duration (Call_Duration_Secs), and notes migrate to Twenty custom fields on the Task. The WhoId (Contact or Lead reference) resolves to the corresponding Twenty Person. The WhatId (Opportunity or Account reference) resolves to the corresponding Twenty Opportunity or Company. Call recording URLs stored in Oracle custom fields migrate as Task attachment references if Twenty's attachment model supports URL-based linking.

Oracle CRM On Demand

Activity: Appointment

maps to

Twenty CRM

Task (task_type = Meeting)

1:1
Fully supported

Oracle Appointment records map to Twenty Task records with task_type set to Meeting. Oracle's Start_Time and End_Time map to Twenty's due_date and due_date (or separate meeting_start and meeting_end custom fields if configured). Location migrates to a custom field. Attendee associations (Contact and Lead attendees) migrate to a meeting_attendees relationship if Twenty supports multi-person meeting records; otherwise, individual Task records are created per attendee with meeting metadata preserved.

Oracle CRM On Demand

Custom Object

maps to

Twenty CRM

Custom Object (or related Company/Person)

lossy
Fully supported

Oracle Custom Objects vary per tenant and require schema reverse-engineering from the source API before mapping. We extract the custom object definition (field names, types, relationships) via Oracle's REST API during discovery. Custom objects that reference standard objects (Account, Contact, Opportunity) map to Twenty custom objects with corresponding relationship fields. Custom objects that represent denormalized data (address lists, product catalogs) may be consolidated into a single Twenty custom object or linked via the company_id relationship depending on the data model intent.

Oracle CRM On Demand

User/Owner

maps to

Twenty CRM

User

1:1
Fully supported

Oracle Named Users map to Twenty User accounts. We resolve by email match during migration. Any Oracle Owner referenced on a record but without a corresponding Twenty User is placed in a reconciliation queue for the customer's admin to provision. OwnerId references on Account, Contact, Opportunity, and Activity records are resolved at migration time against the User mapping table.

Oracle CRM On Demand

Attachment

maps to

Twenty CRM

Attachment

1:1
Fully supported

Oracle record attachments export via Oracle's bulk export or API. We map file name, content type, and blob data to Twenty's attachment model if the target instance supports blob attachments. URL-based attachments (links to Oracle document management) migrate as URL fields on the target record. Large attachment volumes (thousands of files) require separate scoping because storage provisioning on the self-hosted Twenty instance is a customer infrastructure decision.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Oracle CRM On Demand logo

Oracle CRM On Demand gotchas

High

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

High

List exports expire after 168 hours

Medium

Migration Tool requires identical release versions

Medium

Enterprise Lead Referral tier limits lead functionality

Low

Export field access gated by user role privileges

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

  • Twenty v1.0 Docker and Kubernetes migration failures

    GitHub issue #12936 documents database migration failures when installing Twenty v1.0 via Docker or Kubernetes from a fresh setup. Organizations planning to self-host Twenty must verify the current release version and confirm that the container image and migration scripts are stable for their deployment target. We run a test migration into the customer's target Twenty deployment environment before production migration begins. If the customer's target release has known migration script failures, we document the workaround (often a specific Docker Compose version or a manual database schema step) before proceeding.

  • Oracle REST API rate limit of 30 req/min hard-codes migration sequencing

    Oracle CRM On Demand enforces a hard 30 requests per minute per user session on its REST API. The counter resets to zero at the end of each one-minute period, not rolling. For large migrations with hundreds of thousands of records, this creates significant sequencing overhead. We pre-stage data in queue batches, throttle export clients to honor the limit, and use bulk export jobs where Oracle supports them to minimize API round-trips. Without this handling, migrations hit the rate limit error continuously and stall. The effective throughput under the rate limit is approximately 1,800 records per hour for single-threaded extraction, scaling with additional API user sessions if the Oracle tenant allows concurrent sessions.

  • Oracle list export files expire after 168 hours

    When you trigger a list export in Oracle CRM On Demand, the results file is available for download for exactly 168 hours (7 days) before Oracle permanently deletes it. If your migration window slips or your download is interrupted, you must re-queue the export job and wait for it to re-run. We download export files immediately upon job completion and store them in our migration workspace, never relying on Oracle's file retention to bridge gaps between migration phases. For migrations spanning multiple weeks of scoping and validation, we break export jobs into incremental runs rather than one large export.

  • Oracle Lead Referral tier exposes API limitations for lead history

    The Oracle CRM On Demand Enterprise Lead Referral service module restricts users to creating leads only, with no ability to edit, convert, or run analytics on existing lead records via API. Organizations using Lead Referral who are migrating to Twenty must understand that lead record history beyond creation events may be inaccessible via the API under this tier's restrictions. We flag this during discovery, assess the API-readability of existing lead records, and adjust the migration scope accordingly. If lead history is required, we recommend a data export from Oracle's browser UI as a one-time manual extract before migration.

  • Twenty's self-hosted model requires customer-managed infrastructure

    Unlike Oracle CRM On Demand (fully Oracle-hosted SaaS), Twenty CRM requires the customer to manage their own hosting infrastructure. This includes database backups, TLS certificates, domain configuration, and compute scaling. Organizations migrating from Oracle's managed SaaS model must budget for cloud infrastructure costs (AWS, GCP, Azure, or a platform like Railway, PikaPods, or Coolify) and assign an internal resource for ongoing maintenance. We assist with the initial Docker or Kubernetes deployment configuration as part of migration scoping but do not provide ongoing hosting administration.

Migration approach

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

  1. Discovery and source tenant audit

    We audit the Oracle CRM On Demand tenant across API endpoint accessibility, installed modules (Standard CRM On Demand vs. Enterprise Lead Referral), custom object count, record volume per object, user role structure (to identify export privilege restrictions), active Workflow Rules and Assignment Rules, and any Oracle Desktop sync configurations. We run export tests under an administrator account with List - Export All Fields privilege to confirm complete field extraction capability. The discovery output is a written migration scope with record counts, custom object schema, and a Twenty deployment recommendation (self-hosted Docker, Railway, or PikaPods).

  2. Twenty instance provisioning and schema design

    We assist with provisioning the Twenty CRM instance on the customer's chosen hosting target (Docker Compose, Railway, PikaPods, or Kubernetes). We extract Oracle's custom object definitions via the API, reverse-engineer field types, and design the corresponding Twenty schema including custom fields, relationship fields (Company and Person lookups for custom objects), and any picklist values. Twenty's schema is configured via the settings UI and stored in the database; we document all field mappings in a schema design document before migration begins.

  3. User mapping and Owner reconciliation

    We extract every distinct Oracle Owner referenced on Account, Contact, Opportunity, and Activity records and match by email against the Twenty User table. Owners without a matching Twenty User go to a reconciliation queue. The customer's admin provisions any missing Twenty Users before record import resumes. OwnerId references on records are resolved at migration time against this User mapping table; unresolved owners cause record-level import failures that we surface in the reconciliation report.

  4. Test migration into staging Twenty instance

    We run a test migration using a subset of Oracle data (typically 100-500 records per object) into the staging Twenty instance to validate field mapping, object relationships, and dedupe behavior. We surface any field type mismatches (Oracle date formats vs. Twenty's expected format, picklist value gaps, required field violations) and correct the mapping document before production migration. This step also validates that the Twenty Docker or Kubernetes deployment handles the migration workload without the v1.0 database migration failures documented in GitHub issue #12936.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Companies (from Oracle Accounts), Persons (from Oracle Contacts and Leads with the Lead Referral tier limitation flagged), Opportunities (with company_id and person_id lookups resolved), Tasks (from Oracle Tasks, Calls, and Appointments), Custom Objects (last, with all parent lookups resolved). Each phase emits a row-count reconciliation report. We honor Oracle's 30 req/min rate limit with batch sequencing and exponential backoff on 429 responses. Export files from Oracle are downloaded immediately upon job completion and stored in our migration workspace. Parallel to data migration, we document every Oracle Workflow Rule, Assignment Rule, and custom field for the customer's admin to rebuild in Twenty's settings.

  6. Cutover, validation, and handoff

    We freeze Oracle CRM On Demand writes during cutover, run a final delta migration of any records modified during the migration window, then designate Twenty CRM as the system of record. We validate record counts, spot-check 25-50 records against the Oracle source for field accuracy, and deliver the Workflow and Assignment Rule inventory document. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Oracle Workflow Rules as Twenty workflow configurations inside the migration scope; that work is a separate configuration engagement. Twenty hosting maintenance (backups, TLS renewal, compute scaling) remains the customer's ongoing responsibility.

Platform deep dives

Context on both ends of the pair

Oracle CRM On Demand logo

Oracle CRM On Demand

Source

Strengths

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

Weaknesses

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

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Oracle CRM On Demand and Twenty CRM.

  • Object compatibility

    B

    3 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

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

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations under 20,000 Contacts and 3,000 Opportunities with no custom objects and clean Oracle role-based export privileges land between three and five weeks. Migrations with custom objects (requiring schema reverse-engineering from Oracle), large activity histories (over 200,000 engagement records), or Enterprise Lead Referral tier restrictions move to six to ten weeks because of API rate limit sequencing, custom object mapping, and lead history reconciliation. The Oracle-to-Twenty migration timeline also depends on how quickly the customer provisions the Twenty hosting environment and resolves the User reconciliation queue.

Adjacent paths

Related migrations to explore

Ready when you are

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