CRM migration

Migrate from Omni.us to Twenty CRM

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

Omni.us logo

Omni.us

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

42%

5 of 12

objects map 1:1 between Omni.us and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Omni.us is a script-first sales engagement platform—it stores outreach sequences and target account lists but does not maintain standalone Contact, Deal, or Activity objects. Twenty CRM is an open-source CRM with native Contacts, Companies, Opportunities, Activities, and Custom Objects, self-hostable from $1 per orchestration run plus $75 per user per month. Migrating between these platforms requires reconstructing the entire contact layer by tracing Response-to-Script-to-TargetAccount relationships in Omni, then inserting the resolved Contact and Company records into Twenty before attaching script content as linked notes. We also handle custom workbook field discovery, script content preservation, automatic pausing rule documentation for manual rebuild, and file attachment migration via API. Workflows, sequences, and automations do not migrate; we deliver a written inventory of every automation requiring rebuild in Twenty's workflow builder. Timeline ranges from three to eight weeks depending on data volume, custom field complexity, and whether self-hosted or cloud Twenty is the destination.

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

Omni.us logo

Omni.us

What's pushing teams away

  • The platform's narrow feature set—Scripts and Responses—becomes limiting as teams grow and need deeper CRM capabilities beyond sequence management.
  • Limited integrations with popular CRM platforms creates data silos that frustrate teams expecting bidirectional sync with tools already in their stack.
  • Single-tier pricing at $49/month offers no room to scale seat counts or feature access for growing teams without switching platforms entirely.
  • Absence of a free trial or freemium tier forces a commitment decision before teams can validate fit with their specific outreach workflows.

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 Omni.us objects map to Twenty CRM

Each row shows how a Omni.us 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.

Omni.us

Target Accounts

maps to

Twenty CRM

Company

1:1
Fully supported

Omni Target Accounts map directly to Twenty Companies. We preserve company name, domain, and any workbook-level custom fields as Twenty Company custom fields. The domain field becomes the Company website URL. Target Accounts with no name but a valid domain are flagged during scoping for manual review before migration. Parent-account hierarchy, if modeled in Omni, maps to Twenty's self-referential Company relationship field.

Omni.us

Scripts

maps to

Twenty CRM

Note (linked to Company)

1:1
Fully supported

Omni Scripts contain the full outreach sequence text, placeholders, and branching logic. Since Twenty has no native Script or Sequence object, we migrate script content as Note records linked to the relevant Company or Contact. The Note title carries the script name; the Note body carries the full text. For scripts with branching logic, we document the branching structure in the Note and flag it for the customer's admin to rebuild as a Twenty workflow if needed. Placeholder variables are preserved as bracketed tokens in the Note body.

Omni.us

Responses

maps to

Twenty CRM

Contact + Note

1:many
Mapping required

Omni Responses are the primary mechanism for reconstructing the contact layer. Each Response is tied to a Script and a Target Account. We extract any email address, name, phone, or company data from the Response payload, create a corresponding Twenty Contact record, and attach the Response content as a Note linked to that Contact. Responses that contain no identifiable contact information are attached as Company-level Notes. We run a deduplication pass on extracted email addresses to avoid creating duplicate Contact records. Responses with no associated script are flagged separately.

Omni.us

Automatic Pausing Rules

maps to

Twenty CRM

Workflow (documented for manual rebuild)

lossy
Mapping required

Omni Automatic Pausing rules govern outreach sequence pauses based on prospect actions. Twenty does not have an equivalent automated pausing feature in its workflow engine at this time. We document each Automatic Pausing rule in a written inventory that includes the trigger condition, the pause action, the affected script, and a recommended Twenty workflow equivalent using Twenty's available trigger and action types. The customer's admin rebuilds these manually in Twenty's workflow builder post-migration.

Omni.us

Case Studies

maps to

Twenty CRM

Note (linked to Company)

1:1
Mapping required

Omni Case Studies are content attachments linked to accounts or scripts. Twenty has no native Case Study object, so we migrate Case Study content as Note records linked to the associated Company. The Note title carries the Case Study name; the body carries the content and metadata. We flag Case Studies that reference external URLs or file attachments separately for manual re-upload because Omni's attachment storage requires API-based retrieval not covered by standard CSV export.

Omni.us

Custom Workbook Fields

maps to

Twenty CRM

Custom Fields (on target object)

lossy
Mapping required

Omni's three-layer modeling (schema, shared, workbook) means custom fields can exist at different abstraction levels. We perform a pre-migration schema audit via the Omni model IDE to enumerate all active custom fields, their types (text, number, date, duration, checkbox, dropdown), and the object they are attached to. Duration fields and calculated fields require type mapping to Twenty field types. Nested custom properties are flattened to top-level custom fields in Twenty. We build a custom field map before writing any records and validate field type compatibility against Twenty's supported field types.

Omni.us

Users / Seats

maps to

Twenty CRM

User

1:1
Mapping required

Omni user records map to Twenty User accounts. We extract user email addresses, names, and any associated owner IDs from Omni. Role and permission structures in Omni are minimal and do not have a direct Twenty equivalent, so we create baseline User records with standard access and flag permission configuration for the customer's admin to set post-migration. Users referenced as owners on Target Accounts or Scripts are mapped to the Twenty User by email match.

Omni.us

Response metadata

maps to

Twenty CRM

Contact custom fields

lossy
Fully supported

Response metadata in Omni—reply status, reply date, channel type, and engagement indicators—does not map to a native Twenty object. We migrate these as custom fields on the reconstructed Contact record (e.g., first_response_date__c, last_reply_date__c, reply_channel__c). These fields enable the customer's team to preserve engagement context without rebuilding from scratch in Twenty. Fields are created during schema setup and populated during the contact import phase.

Omni.us

Script placeholders

maps to

Twenty CRM

Contact custom fields

lossy
Fully supported

Omni script placeholders (e.g., {{first_name}}, {{company_name}}, {{custom_field}}) are variable tokens that get populated at send time. We extract any placeholder names that reference custom fields or data points not present in the standard Response payload and create corresponding custom fields on the Contact or Company object in Twenty. This ensures that if the customer wants to re-use scripts in Twenty or a connected outreach tool, the required data fields exist on the record.

Omni.us

File Attachments (Case Studies and Scripts)

maps to

Twenty CRM

Attachment via API

1:1
Fully supported

File attachments associated with Omni Case Studies and Scripts are not included in Omni's CSV export. We retrieve attachment metadata and content via the Omni API where available and upload them to Twenty as linked Attachments on the relevant Note or Company record. If an attachment URL is broken or the file is inaccessible via API, we flag it for manual re-upload by the customer's admin and document the complete list of flagged files in the migration report.

Omni.us

Activity (limited)

maps to

Twenty CRM

Task / Event

lossy
Fully supported

Omni does not expose a dedicated Activities API object, meaning historical engagement records (opens, clicks, replies, meetings logged outside of scripts) are not queryable for migration. We document this gap in the migration report and note that teams should continue using Omni or their email platform for historical activity lookups. Any response-level data that can be extracted (reply timestamps, channel indicators) migrates as custom fields on Contact as described above. Future activity tracking begins in Twenty from the cutover date.

Omni.us

Pipeline (nonexistent)

maps to

Twenty CRM

Opportunity (created structure)

lossy
Fully supported

Omni has no Deal or pipeline concept. We create a default Opportunity pipeline in Twenty with standard stages (Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost) and configure it before migration. If the customer has pipeline expectations from their outreach work (e.g., stages based on reply rate or meeting set), we map these to the Twenty Opportunity stages during scoping. The Opportunity object provides the deal tracking capability that Omni entirely lacks.

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.

Omni.us logo

Omni.us gotchas

Medium

60 req/min API rate limit slows bulk migration

High

No dedicated Contacts object means contact layer must be reconstructed

Medium

Custom workbook field types require manual mapping configuration

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

  • Contact layer must be reconstructed from Response data

    Omni does not store contacts as standalone objects. The contact record must be assembled from Response-to-Script-to-TargetAccount chains. Any Response without an identifiable email address, name, or company creates a gap in the contact layer. We run a reconciliation pass after migration to surface orphaned responses (those without a matched Contact) and present them to the customer for manual resolution. Contacts that never received a response or were not associated with a recent script may not appear in the migration export at all if the Response dataset has a time-window boundary.

  • Workflows and Automatic Pausing rules do not migrate

    Omni Automatic Pausing rules and script branching logic have no direct equivalent in Twenty's workflow engine at this time. We do not migrate them as automation code. We deliver a written inventory of every Active Pausing rule with its trigger, conditions, affected scripts, and recommended Twenty workflow equivalent. The customer's admin rebuilds these manually in Twenty's workflow builder. Scripts themselves migrate as Notes, but the automation logic driving when they trigger requires manual reconstruction.

  • File attachments excluded from CSV exports require API retrieval

    Omni's CSV export does not include file attachments linked to Case Studies or Scripts. We attempt to retrieve attachment content via the Omni API where accessible, but attachment URLs may be time-limited or require authentication that prevents bulk retrieval. We flag any attachments that cannot be retrieved via API in the migration report and recommend manual re-upload or a file hosting migration tool for the customer's admin to handle post-migration.

  • Omni API rate limit of 60 req/min affects large migrations

    Omni's API enforces a 60 requests per minute limit per API key. For migrations involving thousands of Scripts, Target Accounts, and Responses, this creates proportional throttling overhead. We implement exponential backoff retry logic and distribute reads across available API keys where possible. For datasets exceeding 50,000 records, migration timelines extend—we flag this during scoping so expectations are set correctly before work begins.

  • Self-hosted Twenty instances require manual version management

    For customers running self-hosted Twenty, database migrations between minor versions (e.g., 1.4.0 to 1.6.7) occasionally surface blank workspace screens if migration steps are missed during update deployment. We coordinate with the customer's infrastructure team to verify that all database migrations have run before writing new records during cutover. Cloud Twenty customers are unaffected by this issue since the hosting team manages version updates.

Migration approach

Six steps for a successful Omni.us to Twenty CRM data migration

  1. Discovery and source audit

    We audit the Omni.us account across all active objects—Scripts, Target Accounts, Case Studies, Responses, Automatic Pausing Rules, custom workbook fields, and Users. We extract record counts per object, identify custom field definitions and their types across the schema/shared/workbook layers, and flag any attachments or files linked to Case Studies or Scripts that may require API-based retrieval. We also identify the Response dataset boundary (whether a time-window export applies) and any Response records that lack contact-identifying fields. The discovery output is a written migration scope with a preliminary object map and a list of scoping questions for the customer.

  2. Schema design and custom field configuration in Twenty

    We configure the destination Twenty workspace before any data migration begins. This includes creating any custom fields on Company, Contact, and Opportunity objects to receive custom workbook fields from Omni, setting up the standard Opportunity pipeline stages (or custom stages if the customer has defined them), creating the User accounts for migrated Omni users, and configuring any custom objects needed for Case Study content if the customer requests a dedicated object rather than Note-based storage. Custom fields are created via the Twenty API using the /metadata endpoint. Schema configuration is validated in a test workspace before production migration.

  3. Contact reconstruction and deduplication

    We run the contact reconstruction logic against the full Response dataset. For each Response, we extract email address, name components, phone, and company name. We deduplicate by email address to avoid creating duplicate Contact records. Responses that yield no identifiable contact data are flagged and assigned to Company-level Notes instead. The deduplication pass produces a Contact import manifest that we reconcile against the full Response dataset to ensure no response is orphaned without a parent Contact or Note. This phase is the most complex in the migration and is validated before proceeding to record insertion.

  4. Sandbox migration and reconciliation

    We run a full migration into a Twenty test workspace using production-like data volume. The customer reconciles record counts (Companies from Target Accounts, Contacts from Responses, Notes from Scripts and Case Studies), spot-checks 25-50 records against the Omni source for field accuracy and completeness, and reviews the custom field mapping for workbook-level fields. Any mapping corrections, missing fields, or schema gaps are resolved in this phase. We do not begin production migration until the customer signs off on the sandbox results.

  5. Production migration in dependency order

    We run production migration in dependency order: Companies (from Target Accounts), Users (validated and provisioned), Contacts (with CompanyId resolved from the Target Account mapping), Notes (Scripts and Case Studies linked to Companies and Contacts), Opportunity pipeline structure (configured but empty until the customer populates it), and custom field population. File attachments that could be retrieved via API are uploaded as Twenty Attachments. Each phase emits a row-count reconciliation report before the next phase begins. We implement exponential backoff retry logic on all Omni API reads to stay within the 60 req/min limit.

  6. Cutover, validation, and automation handoff

    We recommend keeping Omni.us running in read-only mode during the cutover window so the customer can reference historical data during the transition period. We run a final delta migration of any records modified in Omni during the migration window, then enable Twenty as the system of record. We deliver the Automation Inventory document listing every Automatic Pausing rule and script branching logic requiring manual rebuild in Twenty's workflow builder. We support a one-week post-migration window to resolve reconciliation issues raised by the customer's team. We do not rebuild Omni automations as Twenty workflows inside the migration scope; that work requires a separate engagement or admin effort.

Platform deep dives

Context on both ends of the pair

Omni.us logo

Omni.us

Source

Strengths

  • Simple script-based outreach model with a single flat monthly price of $49.
  • Customer support praised for responsiveness and personalized onboarding assistance.
  • Account-based target list management built natively into the platform workflow.
  • Automatic pausing reduces manual management of outreach sequences.

Weaknesses

  • Narrow feature scope—Scripts and Responses only—forces reliance on external tools for broader CRM needs.
  • No free trial or freemium tier means teams must commit before evaluating fit.
  • Limited public API documentation and thin community ecosystem around integrations.
  • Single pricing tier does not scale with team size or feature needs.
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 Omni.us 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

    Omni.us: 60 requests per minute per API key; can be increased to 500 req/min on request.

  • Data volume sensitivity

    B

    Omni.us doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Omni.us 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 Omni.us to Twenty CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Omni.us to Twenty CRM migrations complete in three to five weeks for accounts with under 10,000 Target Accounts, 20,000 Responses, and fewer than 50 custom workbook fields. Larger datasets with extensive response histories (over 50,000 records), multi-level custom workbook fields, or self-hosted Twenty instances with version management complexity extend to six to ten weeks. Omni's 60 req/min API rate limit adds proportional overhead for large response datasets. We provide a detailed timeline with phase milestones during the scoping phase.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Omni.us.
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