CRM migration
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
Source
Twenty CRM
Destination
Compatibility
5 of 12
objects map 1:1 between Omni.us and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a 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
Twenty CRM
Company
1:1Omni 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
Twenty CRM
Note (linked to Company)
1:1Omni 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
Twenty CRM
Contact + Note
1:manyOmni 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
Twenty CRM
Workflow (documented for manual rebuild)
lossyOmni 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
Twenty CRM
Note (linked to Company)
1:1Omni 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
Twenty CRM
Custom Fields (on target object)
lossyOmni'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
Twenty CRM
User
1:1Omni 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
Twenty CRM
Contact custom fields
lossyResponse 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
Twenty CRM
Contact custom fields
lossyOmni 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)
Twenty CRM
Attachment via API
1:1File 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)
Twenty CRM
Task / Event
lossyOmni 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)
Twenty CRM
Opportunity (created structure)
lossyOmni 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.
| Omni.us | Twenty CRM | Compatibility | |
|---|---|---|---|
| Target Accounts | Company1:1 | Fully supported | |
| Scripts | Note (linked to Company)1:1 | Fully supported | |
| Responses | Contact + Note1:many | Mapping required | |
| Automatic Pausing Rules | Workflow (documented for manual rebuild)lossy | Mapping required | |
| Case Studies | Note (linked to Company)1:1 | Mapping required | |
| Custom Workbook Fields | Custom Fields (on target object)lossy | Mapping required | |
| Users / Seats | User1:1 | Mapping required | |
| Response metadata | Contact custom fieldslossy | Fully supported | |
| Script placeholders | Contact custom fieldslossy | Fully supported | |
| File Attachments (Case Studies and Scripts) | Attachment via API1:1 | Fully supported | |
| Activity (limited) | Task / Eventlossy | Fully supported | |
| Pipeline (nonexistent) | Opportunity (created structure)lossy | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Omni.us gotchas
60 req/min API rate limit slows bulk migration
No dedicated Contacts object means contact layer must be reconstructed
Custom workbook field types require manual mapping configuration
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Omni.us
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Omni.us and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Omni.us: 60 requests per minute per API key; can be increased to 500 req/min on request.
Data volume sensitivity
Omni.us doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Omni.us to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Omni.us
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.