CRM migration
Field-level mapping, validation, and rollback between Unanet CRM by Cosential and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Unanet CRM by Cosential
Source
Twenty CRM
Destination
Compatibility
10 of 11
objects map 1:1 between Unanet CRM by Cosential and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Unanet CRM by Cosential serves Architecture, Engineering, and Construction firms with a vertically integrated data model: companies, contacts, deals, personnel records, and a proposal automation module built for pursuit workflows. Twenty CRM is a modern open-source CRM with a simpler schema — People (contacts), Companies (accounts), Opportunities (deals), Notes, Tasks, and custom objects — that loads data via CSV import or REST/GraphQL API. We map Unanet's Contact to Twenty People, Company to Company, and Deal to Opportunity with pipeline-stage value mapping. The non-trivial objects are Unanet's personnel module (no native Twenty equivalent — migrates as a custom object) and the proposal/publishing module (also becomes a custom object with templates preserved as read-only notes for rebuild reference). Unanet's N:N contact-to-company associations split across multiple CSV rows with one primary company per person and secondary associations stored in a custom field. Our migration runs against Unanet's Compass API (v1/v2) with scoped read access. A delta-pickup window captures any records modified during the cutover. Audit logs and one-click rollback are available if reconciliation fails.
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 Unanet CRM by Cosential 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.
Unanet CRM by Cosential
Contact
Twenty CRM
People
1:1Unanet Contact maps directly to Twenty People. Every standard contact field (name, email, phone, job title, address) maps to its Twenty People equivalent. Contacts associated with multiple Unanet companies require a primary company assignment with secondary associations preserved in a custom field.
Unanet CRM by Cosential
Company
Twenty CRM
Company
1:1Unanet Company maps to Twenty Company. Company name, domain/website, industry, employee count, and revenue transfer as direct field mappings. Unanet company hierarchies (parent/child) map to the Twenty Company parent field. Multi-company contact associations collapse to one primary companyId with secondary companies stored in a custom relationship field.
Unanet CRM by Cosential
Deal / Pipeline Stage
Twenty CRM
Opportunity + stage field
1:1Unanet Deal maps to Twenty Opportunity. Deal name, amount, and expected close date transfer directly. Pipeline stages from Unanet map to Twenty Opportunity stage values — each Unanet pipeline stage name requires explicit value mapping to a Twenty stage option (or a custom stage pick-list if the pipeline has more than 5 stages).
Unanet CRM by Cosential
Activity (call, email, meeting, task)
Twenty CRM
Task or Note
1:1Unanet activity records (call logs, emails, meetings, tasks) map to Twenty Tasks with Type differentiation. Email subject lines and body text migrate to the Task subject or a linked Note. Original activity timestamps and owners are preserved on the Twenty record. Unanet's Outlook-synced emails that were stored as activity records export as Tasks with the email subject as the Task name.
Unanet CRM by Cosential
Personnel module
Twenty CRM
Custom Object: Personnel
1:1Unanet's personnel module (tracking staff experience, certifications, and project associations) has no native equivalent in Twenty. We migrate this as a custom Personnel object in Twenty with fields for personnel type, name, contact details, and a custom field capturing the Unanet personnel ID for traceability. Personnel-to-company associations map as lookups to the Company object.
Unanet CRM by Cosential
Proposal / Publishing module
Twenty CRM
Custom Object: Proposal
1:1Unanet's proposal and publishing content (project profiles, qualification statements, resumes, government forms) migrates to a custom Proposal object in Twenty. Proposal content sections migrate as rich-text fields. Proposal templates migrate as read-only Note records with a custom field flagging them as template originals — they cannot be used for auto-population in Twenty and must be rebuilt in the workflow builder.
Unanet CRM by Cosential
User / Owner
Twenty CRM
Workspace Member
1:1Unanet users and deal owners resolve by email match against Twenty Workspace Members. If a Unanet user does not have a corresponding Twenty account, their records are assigned to a fallback owner (or flagged for manual reassignment before migration). Active vs inactive user status in Unanet maps to the account status in Twenty.
Unanet CRM by Cosential
Attachment / File
Twenty CRM
Attachment
1:1Unanet file attachments on companies, contacts, and deals re-upload to Twenty's attachment structure. Files are linked to the parent record (People, Company, or Opportunity) by ID. Large files that exceed Twenty's storage limits are flagged for manual re-upload with the original file name and URL preserved as a reference note.
Unanet CRM by Cosential
Custom Object
Twenty CRM
Custom Object
1:1Unanet custom objects map 1:1 to Twenty custom objects when the target object already exists in the Twenty workspace. When a Unanet custom object has no corresponding Twenty object, we create one with the Unanet field schema. Custom object relationships that are N:N in Unanet require junction objects in Twenty if the association is many-to-many.
Unanet CRM by Cosential
Company-Contact N:N Association
Twenty CRM
People.companyId (primary) + custom field (secondary)
many:1Unanet supports N:N relationships between contacts and companies natively. Twenty's People object has a single companyId lookup. We migrate the most recently modified company association as the primary companyId and store all secondary company IDs as a comma-separated custom field (Secondary_Company_Ids__c) for reference and manual reconciliation.
Unanet CRM by Cosential
Project / Pursuits
Twenty CRM
Custom Object: Project
1:1Unanet's project/pursuit records track project-specific data including directories, financials, logistics, and marketing documentation. These have no native Twenty equivalent. We migrate as a custom Project object with fields for project name, status, associated company, key dates, and a link to the primary opportunity. Project-specific documentation migrates as Note records attached to the Project.
| Unanet CRM by Cosential | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal / Pipeline Stage | Opportunity + stage field1:1 | Fully supported | |
| Activity (call, email, meeting, task) | Task or Note1:1 | Fully supported | |
| Personnel module | Custom Object: Personnel1:1 | Fully supported | |
| Proposal / Publishing module | Custom Object: Proposal1:1 | Fully supported | |
| User / Owner | Workspace Member1:1 | Fully supported | |
| Attachment / File | Attachment1:1 | Fully supported | |
| Custom Object | Custom Object1:1 | Fully supported | |
| Company-Contact N:N Association | People.companyId (primary) + custom field (secondary)many:1 | Fully supported | |
| Project / Pursuits | Custom Object: Project1:1 | 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.
Unanet CRM by Cosential gotchas
Non-standard object names block naive field mapping
API requires Enterprise License agreement
Duplicate contact risk on bulk imports
Custom fields require manual schema enumeration
Proposal templates carry template logic, not just data
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
Audit Unanet data and pre-create Twenty schema
We export Unanet's full data model via the Compass API including contacts, companies, deals, activities, personnel records, proposals, custom objects, and file attachments. A data audit identifies the pipeline stage values, personnel types, proposal templates, and custom field configurations that need to exist in Twenty. We deliver a schema setup checklist: every custom object, custom field name, field type, and pick-list value that must be created in Settings → Data Model before the migration CSV is uploaded. This step runs first because Twenty cannot create fields during import.
Map and transform Unanet data model to Twenty schema
We build the field mapping document across all Unanet objects and Twenty objects. Personnel and proposal modules receive custom object definitions with all fields mapped. Pipeline stages are mapped to Twenty Opportunity stage values with any non-matching stages creating custom stage options. N:N contact-company associations are resolved to one primary companyId with secondary companies in a custom field. Owner resolution runs against Twenty Workspace Members by email. All mapping decisions are documented for your review before any data moves.
Migrate in dependency order: Companies → People → Opportunities → Custom Objects
Twenty's import order requires the one-side of relationships to exist before the many-side. We migrate Company records first, then People (with companyId lookups resolved), then Opportunities (with companyId and peopleId resolved), then custom objects (Personnel, Proposal, Project). Activities and Notes migrate last, attached to their parent records. File attachments are re-uploaded to the appropriate Twenty records after the parent records are created. Each batch runs against a staging environment first to verify field mapping and relationship resolution before the production migration.
Run sample migration with field-level diff and owner verification
A representative slice of 200–500 records (spanning contacts, companies, opportunities, a few personnel entries, and one proposal) migrates first. We generate a field-level diff between the Unanet source values and the Twenty destination values so you can verify that personnel type mapping, pipeline stage values, and company lookups are correct. Owner resolution is validated against the Workspace Members list. Any unmapped fields or failed lookups surface in the diff report for immediate correction before the full run commits.
Execute full migration with delta-pickup window and audit log
The full migration runs against Twenty's production workspace with a delta-pickup window of 24–48 hours after the initial load. During the delta window, any records created or modified in Unanet are captured and appended to the Twenty import. A migration audit log records every record created, every lookup resolved, and every custom field populated. One-click rollback reverts all migration changes if reconciliation fails. After rollback verification, your team can cut over to Twenty knowing the data reflects Unanet's final state at go-live.
Platform deep dives
Unanet CRM by Cosential
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Unanet CRM by Cosential and Twenty CRM.
Object compatibility
2 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
Unanet CRM by Cosential: Not publicly documented.
Data volume sensitivity
Unanet CRM by Cosential 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 Unanet CRM by Cosential to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Unanet CRM by Cosential 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 Unanet CRM by Cosential
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.